sha*_*n a 4 c++ opengl glsl matrix
很多谷歌搜索假设你对这些矩阵代表什么有基本的了解,而我却不知道.
我了解向量和矩阵及其操作.
我想引用一些我无法理解的最简单的着色器代码,将法线和顶点放在眼睛空间中:
//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;
}
Run Code Online (Sandbox Code Playgroud)
我的问题:
(i)当顶点着色器循环遍历每个顶点时,gl_ModelViewMatrix是否随每个顶点循环而变化?或者gl_ModelViewMatrix在每个顶点迭代中是否保持不变,并且可以将任何顶点转换为眼睛空间?
(ii)与我的第一个问题类似,但是gl_NormalMatrix有哪些信息?它是否包含场景中每个法线的信息,以及它如何将进入顶点着色器的当前顶点法线转换为眼睛空间?或者矩阵是否会随着每个顶点进入顶点着色器而变化,那么它如何将进入顶点着色器的当前顶点法线转换为眼睛空间?
kel*_*tar 11
两个指定的矩阵都是uniforms.统一值是常量,它们不在顶点之间变化(与varying变量相反,变量对于每个片段都是变化的,并且attribute- 对于每个顶点).
gl_ModelViewMatrix被预先定义的均匀的变量集从GL_MODELVIEW矩阵(受glLoadIdentity,glTranslate, glRotate,glScale或glLoadMatrix).
gl_NormalMatrix是transpose(inverse(gl_ModelViewMatrix)),它是相同的矩阵但具有反转比例因子.有关此技术的详细解释,请访问http://www.arcsynthesis.org/gltut/Illumination/Tut09%20Normal%20Transformation.html
请注意,这些预定义的制服在较新版本的OpenGL中已弃用(并且也不推荐使用矩阵操作函数).