vec3 rayDirection = vec3( gl_FragCoord.x-250.0,gl_FragCoord.y-250.0 , 10.0);
Теперь я сомневаюсь, что вышеуказанный метод является правильным или неправильным.Пожалуйста, дайте мне некоторые идеи.
Нет никаких правильных или неправильных прогнозов.Вы также можете сопоставить пиксели области просмотра с азимутом и углом места.На самом деле ваш способ сделать это не так уж плохо.Я просто передал бы размеры области просмотра в дополнительной униформе вместо жесткого кодирования и нормализовал вектор.Компонент Z буквально работает как фокусное расстояние.
У меня также есть сомнения, нужно ли нам строить геометрию в коде OpenGL при трассировке лучей в GLSL.например, если я пытаюсь проследить трассировку плоскости, мне нужно построить плоскость в коде OpenGL, используя glVertex2f?
Трассировка лучей работает с глобальным описанием, содержащим полную сцену.Примитивы OpenGL, однако, являются чисто локальными, то есть просто отдельными треугольниками, линиями или точками, и OpenGL не поддерживает базу данных сцены.Таким образом, геометрия, переданная с использованием обычной функции рисования OpenGL, не может быть трассирована лучом (по крайней мере, не так).
Это самое большое препятствие для трассировки лучей с помощью GLSL: каким-то образом вам нужно реализовать способ доставки целогосцена как некоторый свободно доступный буфер.