GLSL中的反射映射

use*_*465 0 reflection opengl-es glsl ios

我正在尝试使用在OpenGL ES 2.0中工作的立方体贴图进行反射贴图.我不确定我是否正确计算反射方向以传递到片段着色器中的samplerCube.

首先,我有Projection,Model和View矩阵以及一个组合的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);
}
Run Code Online (Sandbox Code Playgroud)

我的假设是EyeDirection必须在对象空间中.(正确?)如何在对象空间中获取EyePosition?我是否只是通过逆ModelView矩阵变换摄像机位置(即总是在OpenGL中的{0,0,0}?)?

我试过这个但是我的片段着色器将所有颜色都着色,好像ReflectDir不正确.

有没有人有一个在Xcode中工作的OpenGL ES 2.0反射映射(带有samplerCube)的工作示例?

Pet*_*roz 5

通常的方法是在世界坐标系中同时获得眼睛方向和法线方向.然后将查找向量计算为

vec3 lookup = normalize(reflect(EyeDir, Normal));