【发布时间】:2018-11-07 15:21:59
【问题描述】:
在这个 glsl 着色器示例中,一些顶点法线通过变换转换为视图空间:vec4(vertNormal,1.0)).xyz
为什么我们需要进行这种转换?
#version 430
layout (location=0) in vec3 vertPos;
layout (location=1) in vec3 vertNormal;
void main(void)
{
...
// convert vertex position to view space
vec4 P = mv_matrix * vec4(vertPos,1.0); // looks good
// convert normal to view space
vec3 N = normalize((norm_matrix * vec4(vertNormal,1.0)).xyz); // why to vec4 and back to vec3?
...
}
【问题讨论】:
-
反正这是错误的。对于Orthogonal matrix 和
N = normalize(transpose(inverse(mat3(norm_matrix))) * vertNormal);,它必须是N = normalize(mat3(norm_matrix) * vertNormal);。