У меня возникли проблемы с преобразованием. По каким-то причинам все не так, как мне кажется, должно быть, но, честно говоря, все преобразования взад и вперед заставляют меня довольно головокружительно.raytracing: проблемы с преобразованиями
Как я прочитал всюду (хотя явные объяснения редко, имхо), принцип алгоритма преобразований заключается в следующем:
- преобразования Луч (Происхождение и направление) с обратной матрицы преобразования
- преобразование полученного Пересечения-Point с матрицей трансформации
- преобразование объекта, нормально на пересечении-точка с транспонированной обратного
Из того, что я понял, это должно было сделать трюк. Я почти уверен, что моя проблема заключается в том, что я пытаюсь рассчитать освещение, поскольку как начальное пересечение, так и алгоритм освещения используют ту же функцию (obj.getIntersection()
). Но опять же, я понятия не имею. :(
Вы можете прочитать части моего кода здесь:
main.cpp, scene.cpp, sphere.cpp, sdf-loader.cpp
Пожалуйста, дайте мне знать, если вам нужно больше информации, чтобы помочь мне - и, пожалуйста, помогите мне;)
EDIT:
Я сделал некоторые результаты, возможно, кто-то "видит" (по результатам), где я могу быть неправым:
нетрансформированный сцена:
сфера масштабируется (2,4,2):
окно переведены (0, -200,0):
сфера перевод (-300,0,0):
сфера х повернутых (45 °):
Было бы проще, если вы смогли бы написать минимальный код, чтобы воспроизвести проблему здесь. Но есть ли реальная проблема, или вы просто думаете, что может быть проблема? – olevegard
Я бы с удовольствием, но я использую рамки из своего университета, чтобы сделать изображение - и я сомневаюсь, что они хотели бы, чтобы я делил их код. :(Пожалуйста, посмотрите на части моего кода, который я наклеил на pastebin. На самом деле, все в логике и то, что я сделал неправильно, обязательно должно быть там. Если вам нужно больше (например, sphere.hpp), пожалуйста, дайте мне знать. – alex
Одна вещь будьте осторожны - при преобразовании нормали вам нужно использовать однородные координаты '[x, y, w, 0]' вместо '[x, y, z, 1]' или вам нужно только умножить на вращая часть преобразования. –