raytracing: проблемы с трансформациями

У меня проблемы с включением преобразований. По каким-то причинам все идет не так, как я думаю, но, честно говоря, все трансформации вперед и назад вызывают у меня головокружение.

Как я читал везде (хотя явные объяснения редки, imho), основной алгоритм преобразований заключается в следующем:

  • преобразовать луч (начало и направление) с помощью обратной матрицы преобразования
  • преобразовать полученную точку пересечения с матрицей преобразования
  • преобразовать нормаль объекта в точке пересечения с транспонированной обратной

Из того, что я понял, это должно сработать. Я почти уверен, что моя проблема заключается в том, что я пытаюсь рассчитать освещение, так как и начальное пересечение, и алгоритм освещения используют одну и ту же функцию (obj.getIntersection()). Но опять же, я понятия не имею. 🙁

Вы можете прочитать части моего кода здесь:

main.cpp, scene.cpp, sphere.cpp, SDF-loader.cpp

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, чтобы помочь мне — и, пожалуйста, помогите мне! 😉

РЕДАКТИРОВАТЬ:

Я сделал некоторые результаты, может быть, кто-то «видит» (по результатам), где я могу ошибаться:

нетрансформированная сцена:

нетрансформированная сцена

Сфера масштабируется (2,4,2):

масштабированная сфера (2,4,2)

коробка переведена (0, -200,0):

коробка переведена (0, -200,0)

сфера переведена (-300,0,0):

сфера переведена (-300,0,0)

сфера вращается (45 °):

сфера вращается (45 °)

4

Решение

Вообще для преобразования в компьютерной графике я бы порекомендовал вам взглянуть на scratchapixel.com и, в частности, на этот урок:

http://scratchapixel.com/lessons/3d-basic-lessons/lesson-4-geometry/

и этот, где вы можете увидеть, как преобразования (матрицы) используются для преобразования лучей и объектов:

http://scratchapixel.com/lessons/3d-basic-lessons/lesson-8-putting-it-all-together-our-first-ray-tracer/

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]