【发布时间】:2014-07-23 06:41:38
【问题描述】:
我正在尝试使用来自http://antongerdelan.net/opengl/cubemaps.html 的 GLSL 代码在 FxPlug 中实现多维数据集映射。我对代码所做的唯一主要修改是变量名更改以及使用 gl_Vertex 和 gl_Normal 而不是属性。
顶点程序sn-p:
varying vec3 pos_eye;
varying vec3 n_eye;
pos_eye = vec3(ViewMatrix * ModelMatrix * gl_Vertex);
n_eye = vec3(ViewMatrix * ModelMatrix * vec4(gl_Normal, 0.0));
gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * gl_Vertex;
片段程序sn-p:
vec3 incident_eye = normalize(pos_eye);
vec3 norm = normalize(n_eye);
vec3 reflected = reflect(incident_eye, norm);
reflected = vec3(InverseViewMatrix * vec4(reflected, 0.0));
vec3 cubemapColor = textureCube(cubemap, reflected).rgb;
当我加载模型然后插入相机时,立方体贴图实际上开始倒置,但是一旦我将相机移开一定距离,我就会得到正确的结果。在实施立方体贴图之前,有没有人见过这个问题?我认为这是 Motion 和/或 FxPlug 如何处理相机的问题。
可以在http://youtu.be/Yj85y-VKjCY找到有关实际问题的视频
在视频中,我加载了一个基本球体,将其放大并启用天空盒。球体上的立方体贴图开始倒置。当我旋转球体时,立方体贴图甚至不会移动(当相机移动时,请忽略整个视频中的黑色纹理伪影;这似乎发生在内存不足或其他情况下)。放大球体后,我得到了更真实的“反射”失真,但立方体贴图仍然是颠倒的。 直到我开始缩小到一个合理的距离,立方体贴图才转变为它应该看起来的样子。我注意到的是,当球体周围的白色矩形完全可见时,立方体贴图看起来是正确的。
对于如何解决此问题的任何建议,我将不胜感激。提前致谢!
【问题讨论】: