Трассировка лучей для сферы с отображением смещения

Я заинтересован в создании простого приложения типа «Google Планета Земля» (для наложения моей собственной информации, а не огромного количества данных, которые есть в Google). Я бы хотел, чтобы это было простое приложение X11, которое отслеживает лучи сферы с информацией о смещении (топографической). Пересечение лучей и сфер довольно просто, но когда туда добавляется отображение отображения, оно начинает расплываться в моей голове.

Мне было интересно, есть ли простой способ расширить базовое пересечение лучей и сфер, чтобы включить данные смещения ...


person gct    schedule 18.12.2010    source источник


Ответы (3)


Отображение смещения довольно просто - просто создайте мозаику для сферы, добавьте смещения к позициям вершин в зависимости от высоты, взятой из карт, и проследите лучи для всех частей.

Как далеко камера от сферы / земли? Если вы находитесь прямо у поверхности, вероятно, вообще не стоит делать целую «сферу», просто создайте «поле высоты». Если вы далеко (просматриваете всю планету сразу), то даже самые высокие горы не должны заметно смещать поверхность, поэтому вместо этого вам следует использовать простое отображение рельефа. Также можно использовать комбинацию - грубую тесселяцию, которая действительно смещена, и отображение рельефа на остаточной разнице высот.

Но в любом случае я не могу представить, зачем вам трассировка лучей, как вы описали проблему. Просто нарежьте его на треугольники и используйте OpenGL. Вам, вероятно, не нужны эффекты с трассировкой лучей.

person Larry Gritz    schedule 18.12.2010
comment
См. Мой комментарий в ответ на Vuk. Я надеюсь, что Земля будет представлена ​​в виде сферы, чтобы расчет пересечения был как можно более простым. OpenGL отсутствует, потому что большую часть времени мы хотим иметь возможность запускать что-то по сети с сервера, а GLX имеет тенденцию задыхаться из-за сокета. - person gct; 18.12.2010

Я нашел этот документ: http://www.cgl.uwaterloo.ca/~ecdfourq/GI2008/FourquetGI2008.pdf

Подумал, что поделюсь, потому что, кажется, это именно то, чем я хочу заниматься, спасибо, ребята!

person gct    schedule 18.12.2010
comment
Вы знаете о реальной реализации этого алгоритма? У меня есть приложение, в котором я бы очень хотел его опробовать. - person David Given; 30.01.2014
comment
Эй, я сейчас пытаюсь это реализовать. Это одна из целей, которые я поставил перед собой в качестве последнего проекта для курса, который я прохожу (один из авторов - мой профессор, но он не написал основную статью). Это оказалось мучительно сложно, но я уже близко. Я веду журналы выполнения проекта здесь. Я еще ничего не рассказывал о карте высот, потому что это еще не сделано, но когда я прибью (если я это сделаю), я отправлю победную запись. Пока что форма у меня вроде правильная, тени искажены, а нормали полностью отключены: | - person Fab Castel; 07.11.2014

Что ж, процесс Ray-Tracing одинаков, независимо от того, есть ли у вас простой 20 -полисфера или сложная перемещаемая 2к-полисфера. Луч пересекает сцену независимо от того, что она содержит. Но он используется для достижения визуальных эффектов, таких как прозрачность, отражения, преломления и т. Д., И из того, что вы сказали в своем вопросе, я думаю, вы могли бы обойтись без них в своем проекте. Очень вероятно, что здесь вы сможете обойтись простым недорогим Ray-Casting.

Итак, как только вы установили движок рендеринга, вы можете добавить в сцену все необходимое смещение. Два наиболее распространенных способа изменения геометрии:

  1. Отображение рельефа и
  2. Отображение смещения

Сопоставление смещения добавляет реальные многоугольники к существующей геометрии, в то время как сопоставление рельефа только имитирует визуальный эффект, изгибая нормали поверхности и, таким образом, влияя на затенение объекта. И хотя изгиб нормалей - гораздо более быстрая и менее затратная операция, чем вычисление геометрии и добавление новых полигонов, она не дает точных результатов затенения, поэтому следите за этим, если это имеет какое-либо значение для вашего приложения.

Также рассмотрите возможность использования адаптивных алгоритмов и структур данных уровня детализации, поскольку чем дальше вы находитесь от геометрии, тем меньше требуется деталей.

person Vuk    schedule 18.12.2010
comment
Я действительно надеялся, что, поскольку я моделирую Землю, я смогу сохранить ее в виде геометрической сферы, чтобы не было обхода сцены или тестирования нескольких полигонов. - person gct; 18.12.2010
comment
Да, это зависит от контекста, то есть будете ли вы размещать только рельефные образования, такие как горы, на сфере, представляющей Землю, или вам также понадобятся пещеры с дырами в них, полупрозрачные реки и тому подобное, что необходимо сделать с двух сторон . Что именно вы имеете в виду, когда говорите об отсутствии обхода сцены и многополигонального тестирования? У меня есть один важный вопрос: планируете ли вы написать движок рендеринга с нуля или будете использовать уже существующий? - person Vuk; 18.12.2010
comment
Я сам напишу. Мне просто нужна Земля, на которую могут быть наложены данные синего мрамора, с правильной информацией о высоте. Мне не нужно ничего необычного, вроде пещер или прозрачных рек. Я, наверное, оставлю воду ровной синей, если смогу. - person gct; 18.12.2010
comment
Поднимите вверх за то, что вы решили немного запачкать руки с внедрением средства рендеринга, вы, несомненно, извлечете пользу из этого опыта. Смещение - это не что иное, как добавление к нему нескольких математических уравнений, и оно должно быть для вас довольно простым. - person Vuk; 18.12.2010