【发布时间】:2012-02-29 18:42:36
【问题描述】:
我正在尝试使用在 OpenGL ES 2.0 中工作的立方体贴图来获得反射贴图。我不确定我是否正确计算了反射方向以传递到片段着色器中的 samplerCube。
首先,我有投影、模型和视图矩阵以及组合的模型视图矩阵。这是我在 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?我是否只是通过逆 ModelView 矩阵变换相机位置(即在 OpenGL 中始终位于 {0,0,0}?)?
我已经尝试过了,但是我的片段着色器将所有内容都染成了黑色,好像 ReflectDir 不正确。
有没有人有一个在 Xcode 中工作的 OpenGL ES 2.0 反射映射(带有 samplerCube)的工作示例?
【问题讨论】:
-
什么是
Model?当你这样做时发生了什么错误? -
模型是将对象空间坐标转换为世界空间坐标的变换矩阵。当我的对象渲染时,它是完全黑色的,但它应该使用片段着色器中的 ReflectDir 从 samplerCube 中采样颜色。所以,我认为我计算 ReflectDir 的方式有问题。
标签: ios reflection opengl-es glsl