2013-03-06 61 views
3

我有一个3D坐标,我想通过modelVeiw矩阵进行转换,以进入GLSL着色器的视图空间。该点在着色器中定义,并且不受OpenGL转换的影响。无论如何要做一些像gl_ModelViewMatrix *(vec3名称)?通过modelview矩阵乘以vec3

+0

邮政编码请 – GreenGuerilla 2013-03-06 14:08:39

+0

通常一个顶点着色器做'void main(){gl_position = glMatrix * aVertex; }'aVertex是一个属性,glMatrix是一个统一体。这两个都可以在着色器中生成。去做就对了! – 2013-03-06 14:15:20

+0

@AkiSuihkonen当我运行代码vec3 tfLightPos =(gl_ModelViewMatrix * lightPos);我得到错误0(8):错误C1101:模糊重载函数引用“mul(mat4,vec3)” – Abaab 2013-03-06 14:23:09

回答

6

编号gl_ModelViewMatrix是一个mat4。你需要乘以一个vec4(w中有1)。

+0

谢谢!我会把它投票,但我是这样一个noob我没有足够的声誉... – Abaab 2013-03-06 14:26:25

+1

w的内容应该由点的目的决定 - 是一个规则的顶点要转换或正常(在这种情况下,w = 0,并且还可以将vec3乘以MVM的上部3x3矩阵。) – 2013-03-06 14:29:59

+1

我们所有的语义都是粗略的。我认为“坐标”是“点”的同义词,并不意味着一个矢量,但我只是查了一下,我错了。你用“点”来表示“点”或“矢量/方向”,这也是不正确的。 你不应该在技术上做mat3(MVM)* normal;你应该做正常* inverseOfMVM。 http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations#Transforming_Normal_Vectors – Jessy 2013-03-06 19:10:22