Я пытаюсь получить отображение отражения с картой куба, работающей в OpenGL ES 2.0. Я не уверен, правильно ли я рассчитываю направление отражения, чтобы передать кубу sampleler в фрагментном шейдере.
Для начала у меня есть матрицы Проекция, Модель и Вид, а также комбинированная матрица ModelView. Вот код моего вершинного шейдера в GLSL:
attribute vec4 Position;
attribute vec3 Normal;
uniform mat4 Projection;
uniform mat4 ModelView;
uniform mat3 Model;
uniform mat4 ModelViewProjectionMatrix;
uniform vec3 EyePosition;
varying vec3 ReflectDir;
void main()
{
gl_Position = Projection * ModelView * Position;
mediump vec3 EyeDir = normalize(Position.xyz - EyePosition);
// Reflect eye direction by normal, and transform to world space
ReflectDir = Model * reflect(EyeDir, Normal);
}
Мои предположения: EyeDirection должен находиться в объектном пространстве. (Правильный?)
Как мне получить EyePosition в объектном пространстве? Должен ли я просто преобразовать положение камеры (то есть всегда в {0,0,0} в OpenGL?) С помощью обратной матрицы ModelView?
Я пробовал это, но мой фрагментный шейдер окрашивает все в черный цвет, как будто ReflectDir неверен.
Кто-нибудь получил рабочий пример отображения отражения OpenGL ES 2.0 (с помощью samplerCube), работающего в Xcode?