gpt4 book ai didi

c++ - 着色器中的 gl_NormalMatrix 和 gl_ModelViewMatrix 是什么?

转载 作者:太空狗 更新时间:2023-10-29 19:48:30 25 4
gpt4 key购买 nike

很多谷歌搜索都假设你对这些矩阵代表什么有基本的了解,而我却没有。

我了解 vector 和矩阵及其运算。

我想引用我无法理解的最简单的着色器代码,将法线和顶点放在眼空间中:

//vertex shader
varying vec4 color;
varying vec3 N;
varying vec3 v;
void main(void)
{

v = vec3(gl_ModelViewMatrix * gl_Vertex);
N = normalize(gl_NormalMatrix * gl_Normal);

color = gl_Color;

gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

我的问题:

(i) 当顶点着色器循环遍历每个顶点时,gl_ModelViewMatrix 是否随着每个顶点循环而改变?或者 gl_ModelViewMatrix 是否在每次顶点迭代中保持不变,并且可以将任何顶点转换为眼空间?

(ii) 与我的第一个问题类似,但 gl_NormalMatrix 包含哪些信息?它是否包含场景中每条法线的信息,以及它如何将进入顶点着色器的当前顶点法线转换为眼空间?或者矩阵是否随着每个顶点进入顶点着色器而改变,这就是它如何将进入顶点着色器的当前顶点的法线转换为眼睛空间?

最佳答案

两个指定的矩阵都是 uniform。统一值是常量,它们不会在顶点之间改变(与 varying 变量相反,后者针对每个片段和 attribute - 针对每个顶点而改变)。

gl_ModelViewMatrixGL_MODELVIEW 矩阵的预定义统一变量集(受 glLoadIdentityglTranslate、 glRotateglScaleglLoadMatrix)。

gl_NormalMatrixtranspose(inverse(gl_ModelViewMatrix)),它是相同的矩阵,但比例因子倒置。可以在 http://www.arcsynthesis.org/gltut/Illumination/Tut09%20Normal%20Transformation.html 找到对这项技术的很好解释。

请注意,这种预定义制服在较新版本的 OpenGL 中已弃用(并且矩阵操作函数也已弃用)。

关于c++ - 着色器中的 gl_NormalMatrix 和 gl_ModelViewMatrix 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23210843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com