我正在测试一个基本的立方体贴图实现,除了最后一个细节之外它工作正常。 当我移动相机时,立方体贴图会在上/下轴上翻转。
当我移动相机时,请在发生翻转时注意我的视图矩阵:
------
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
------
给出以下图片:
------
-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
------
给出以下图片:
请注意第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;
}
任何想法如何调试或解决它,以便反射总是“正确的方式”?
答案 0 :(得分:1)
我猜你在计算中某处失去了精确度,可能是矩阵反转。
一些选项:
highp
?view
/ model_view
矩阵定义为dmat4
(同样为了更好的精确度)。