繁体   English   中英

OpenGL Projection / Matrix混淆

[英]OpenGL Projection/Matrix confusion

我试图投射一个点的法线并根据它是否(从相机/观察平面的角度来看)倾斜左侧垂直或右侧垂直来着色。

为此,我将我的观点正常并将其乘以gl_ModelViewProjectionMatrix,并检查它是否具有正x值或负x值。 然而,我的所有点都变为红色(表示垂直左侧,绝对不是这样)。 如果我将ModelViewProjectionMatrix更改为gl_ProjectionMatrix,我会得到红点和绿点,但是如果没有ModelViewMatrix,它们显然没有从相机的角度着色。

我在这里误解了什么吗?

着色器示例:

void main(){
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

    vec4 temp = vec4(vNormal.x, vNormal.y, vNormal.z, 1);
    vMajorTransformed = gl_ModelViewProjectionMatrix * temp;

    if (vMajorTransformed.x < 0) {
        gl_FrontColor = vec4(1, 0, 0, 1);
    } else {
        gl_FrontColor = vec4(0, 1, 0, 1);
    }

    gl_PointSize = 3;
}

法线是方向,而不是点。 这意味着它的w分量应为0.否则,你最终可能会对它进行转换,这肯定会弄乱x, y, z坐标(我猜你的情况就是这样)。

另请注意,如果您的模型视图矩阵包含旋转和平移以外的任何内容,则法线将再次混乱。 它们必须通过逆转置进行转换。 反转和转置在仅旋转矩阵上取消,但对于其他转换,您必须使用它们。

并且您可能不希望对它们应用投影 - 您可以在相机坐标中评估您所追求的测试( x坐标)(这通常比投影空间更容易推理)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM