2013-08-24 2 views
4

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

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

  • преобразования Луч (Происхождение и направление) с обратной матрицы преобразования
  • преобразование полученного Пересечения-Point с матрицей трансформации
  • преобразование объекта, нормально на пересечении-точка с транспонированной обратного

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

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

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

Пожалуйста, дайте мне знать, если вам нужно больше информации, чтобы помочь мне - и, пожалуйста, помогите мне;)

EDIT:

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

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

untransformed scene

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

sphere scaled (2,4,2)

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

box translated (0,-200,0)

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

sphere translated (-300,0,0)

сфера х повернутых (45 °):

sphere x-rotated (45°)

+0

Было бы проще, если вы смогли бы написать минимальный код, чтобы воспроизвести проблему здесь. Но есть ли реальная проблема, или вы просто думаете, что может быть проблема? – olevegard

+0

Я бы с удовольствием, но я использую рамки из своего университета, чтобы сделать изображение - и я сомневаюсь, что они хотели бы, чтобы я делил их код. :(Пожалуйста, посмотрите на части моего кода, который я наклеил на pastebin. На самом деле, все в логике и то, что я сделал неправильно, обязательно должно быть там. Если вам нужно больше (например, sphere.hpp), пожалуйста, дайте мне знать. – alex

+0

Одна вещь будьте осторожны - при преобразовании нормали вам нужно использовать однородные координаты '[x, y, w, 0]' вместо '[x, y, z, 1]' или вам нужно только умножить на вращая часть преобразования. –

ответ

0

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

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/

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

 Смежные вопросы

  • Нет связанных вопросов^_^