OpenGL立方体贴图反射与移动相机翻转

时间:2014-07-13 11:40:54

标签: opengl glsl texture-mapping

我正在测试一个基本的立方体贴图实现,除了最后一个细节之外它工作正常。 当我移动相机时,立方体贴图会在上/下轴上翻转。

当我移动相机时,请在发生翻转时注意我的视图矩阵:

------
 0.01,  0.13, -0.99,  0.00
 0.00,  0.99,  0.13,  0.00
 1.00, -0.00,  0.01,  0.00
-1.86, -0.28, -6.34,  1.00
------ 

给出以下图片:

enter image description here

------   
-0.01,  0.13, -0.99,  0.00
 0.00,  0.99,  0.13,  0.00
 1.00,  0.00, -0.01,  0.00
-1.95, -0.28, -6.31,  1.00
------

给出以下图片: enter image description here

请注意第1列和第3列中的符号更改为0.01。这告诉我什么?

对于GLSL中的正常计算,我执行以下操作:

顶点着色器:

mat4 model_view = view * m;
position_eye = vec3(model_view * vec4(vertex_position, 1.0));
mat3 normal_matrix = mat3(transpose(inverse(model_view)));
normal_eye = normalize(normal_matrix * vertex_normal);

片段着色器:

 vec3 func_cubemap_reflect()
 {
   vec3 incident_eye = normalize(position_eye);
   vec3 normal = normalize(normal_eye);
   vec3 reflected = reflect(incident_eye, normal);

   // convert from eye to world space
   reflected = vec3(inverse(view) * vec4(reflected, 0.0));
   return texture (cube_texture, reflected).rgb;
  }

任何想法如何调试或解决它,以便反射总是“正确的方式”?

1 个答案:

答案 0 :(得分:1)

我猜你在计算中某处失去了精确度,可能是矩阵反转。

一些选项:

  • 尝试在着色器中设置highp
  • 如果您的GLSL版本支持它,您可以尝试将view / model_view矩阵定义为dmat4(同样为了更好的精确度)。