Несколько лет назад я подслушал технику, которая дает пользователю иллюзию вращающейся планеты с помощью 2D-текстуры. Учитывая, что пользователь не может изменить свою позицию или видовой экран.
Как называется эта техника?
Несколько лет назад я подслушал технику, которая дает пользователю иллюзию вращающейся планеты с помощью 2D-текстуры. Учитывая, что пользователь не может изменить свою позицию или видовой экран.
Как называется эта техника?
Ответы:
Хорошо, я думаю, что у меня есть представитель сейчас. Содержание предыдущего поста с вложенными изображениями. Это эффект вращающейся планеты, который вы ищете? Это просто прокручиваемое 2D-изображение, просматриваемое через полупрозрачную «дыру» в звездном поле.
Я собрал небольшой небольшой анимированный GIF-файл с описанием эффекта. Понятно, что анимацию можно было бы сделать намного плавнее - я сместил поверхность планеты на 4 пикселя в каждом кадре. Он также не настроен на обертывание изображения, поэтому в конце цикла есть сбой.
планета http://www.perludus.com/orbit.gif
Я делал все это в Photoshop, но концепция должна работать в среде 2D-рендеринга, которая позволяет вам делать альфа-пленки и т.д. Вот серия скриншотов, показывающая процесс ...
Чтобы оживить поверхность вашей планеты, просто переместите основную текстуру поверхности планеты. Вы должны научиться смещать текстуру, когда она достигает края, чтобы получить плавное и бесконечное вращение.
Надеюсь, это поможет и это тот эффект, который вы искали!
PS Видел эту статью о художниках с довольно новым способом создания текстур планет - заставил меня задуматься над этим ответом :) http://www.behance.net/gallery/Pan-Planets/9557465
я собираюсь угадать, что вы имеете в виду, и просто выдвинуть идею, но это, безусловно, не будет «известным» способом сделать это.
все в 2D
возьмите 2 текстуры. одна твоя земля масса, другая твоя туча. Облака должны иметь альфа-слой, который соответствует, чтобы вы могли «видеть сквозь них».
сделайте текстуры бесшовными, то есть они будут бесшовной оберткой. Существуют программы, которые помогут вам сделать эти или учебные пособия в фотошопе, которым вы можете следовать.
затем, наконец, вы создаете трафаретную маску, которая представляет собой просто круг, так что вы фактически смотрите через круглое отверстие на свои квадратные текстуры, таким образом маскируя углы.
теперь вы анимируете матрицы текстур земли и текстуры облаков, чтобы заставить их двигаться. заставить их двигаться в разных направлениях и скоростях, и он будет вращаться. все зависит от того, насколько легко вы сделали свои текстуры.
Я думаю, что эта статья описывает технику. (Это на русском, поэтому я выкладываю переведенную ссылку.)
Я реализовал это здесь. http://github.com/meric/renderplanet
По сути, вы берете изображение, которое кодирует ортографическую проекцию ( http://mathworld.wolfram.com/OrthographicProjection.html ), и обтягиваете текстуру планеты и облака вокруг нее с помощью шейдера. Сместите текстуру планеты в соответствии с dt, чтобы она вращалась. Используйте подготовленное полупрозрачное изображение для кольца атмосферы и тени или создайте его, рисуя полупрозрачные дуги и экспериментируя с шейдером для тени.
Вот изображение:
Для каждого пикселя внутри круга Red + Green/255
нормализована координата X текстуры планеты / облака для поиска и Blue + Alpha/255
нормализована координата Y.
Вот результат:
Текстуры планет и облаков должны быть в прямоугольной проекции.
Ваш вопрос неясен относительно ограничений на контекст, в котором вы работаете. Подавляющее большинство текстур в 3D-рендеринге являются 2D. Так что, если вы просто показываете 3D-сферу с 2D-текстурой поверхности, наложенной вокруг нее, это на самом деле не проблема. Если вы не можете использовать 3D-рендеринг, то вы должны сказать, что именно вы можете использовать.
Основная проблема заключается в том, что вы должны визуализировать плоскую текстуру на поверхности сферы, которую вы получаете бесплатно с помощью 3D-рендеринга. Когда планета вращается, видимые части поверхности планеты анимируются нелинейным образом (экваториальные части текстуры движутся быстрее, чем полюса). Поэтому я думаю, что либо вы должны исказить изображение самостоятельно, когда наносите его на диск, либо вы делаете это в соответствии с предложением VirtualVoid, и просто имеете несколько изображений, которые вы меняете с течением времени.
Это было бы ужасно реализовать, но если вы можете визуализировать текстуру, пиксель за пикселем, то вы могли бы в основном выполнять вычисления растеризации для каждой линии сферы в отдельности. Предположим, что ваша карта поверхности выровнена, так что на экваторе 512 пикселей изображения. Давайте также предположим, что ваш видимый диск имеет ширину 256 пикселей. Теперь представьте, что каждая строка рендеринга диска представляет собой скользящее окно на текстуре поверхности. На экваторе окно составляет 50% ширины текстуры, и вы просто копируете каждый из 256 пикселей на эквивалентный пиксель на диске. Следующая строка на диске будет чуть меньше 256 пикселей, но из-за искаженной карты поверхности все еще есть 256 пикселей входных данных карты поверхности. Таким образом, вы затем отбираете данные карты входной поверхности и визуализируете полученный пиксель. Для легкой математики, давайте Предположим, что 1/3 пути между экватором и полюсом имеет ширину 128 пикселей на выходном диске. Таким образом, каждый из этих 128 пикселей будет средним из двух соседних пикселей. Когда вы дойдете до полюса, вы бы усреднили все 256 пикселей только в несколько выходных пикселей.
Вы также можете сделать это по-другому, и строки в исходной текстуре будут иметь разную длину. Таким образом, в то время как строка, содержащая исходные данные, имеет 512 пикселей, строка 1/3 пути вниз имеет только 256 пикселей, а линия внизу имеет всего несколько пикселей. Но каждая строка удваивает ширину диска по эквивалентной координате y. Такую текстуру было бы абсолютно ужасно создавать. И, вероятно, пострадает от ужасных проблем с алиасами.
В обоих этих случаях ваша анимация просто увеличивает начальный пиксель x во входной текстуре и переносит ее в начало строки входной текстуры.
Чем больше я пишу об этом сейчас, тем больше я убежден, что это ужасная идея, которую вы бы реализовали, если бы у вас действительно не было абсолютно другого выбора. И вам придется оказаться в очень необычной ситуации, чтобы не было другого выбора.
Я не верю, что слышал о каких-либо решениях этой (довольно расплывчатой) проблемы в качестве конкретного именованного метода.
Спрайты. Похоже, что вы описываете 2D-спрайт в движке 3D-игр для дешевого рендеринга (Nintendo64 делала это повсеместно, как и многие ранние 3d-движки).
Если вы хотите отобразить вращающуюся планету, вам просто нужно отобразить двумерный спрайт, который был анимирован на основе листа спрайта, который представлял собой предварительно отрисованный поворот планеты. Например, анимированный .GIF. Проблема в том, что он будет предварительно визуализирован, так как, как вы сказали, это работает, только если пользователю не разрешено манипулировать углом обзора.
Это может быть простая анимация, использующая одну текстуру с несколькими кадрами.