【问题标题】:Multiply a vec3 by modelview matrix将 vec3 乘以模型视图矩阵
【发布时间】:2013-03-06 14:04:38
【问题描述】:

我有一个 3D 坐标,我想通过 modelVeiw 矩阵进行转换,以进入 GLSL 着色器中的视图空间。该点在着色器中定义,不受 OpenGL 变换的影响。有没有办法做 gl_ModelViewMatrix*(vec3 name) 之类的事情?

【问题讨论】:

  • 通常情况下,顶点着色器会执行void main(){ gl_position = glMatrix * aVertex; },其中 aVertex 是一个属性,而 glMatrix 是一个制服。这两者都可以在着色器中生成。去做吧!
  • @AkiSuihkonen 当我运行代码时 vec3 tfLightPos = (gl_ModelViewMatrix*lightPos);我收到错误 0(8):错误 C1101:不明确的重载函数引用“mul(mat4, vec3)”

标签: opengl glsl lwjgl vector-graphics


【解决方案1】:

没有。 gl_ModelViewMatrix 是一个 mat4。您需要将其乘以 vec4(w 为 1)。

【讨论】:

  • 谢谢!!我会投票赞成,但我是个菜鸟,我没有足够的声誉......
  • w 的内容应该由点的目的决定——它是要转换的常规顶点还是法线(在这种情况下 w=0,也可以将 vec3 乘以MVM 的上 3x3 矩阵。)
  • 我们所有的语义都是粗略的。我以为“坐标”是“点”的同义词,不能指向量,但我刚查了一下,我错了。您使用“点”来表示“点”或“矢量/方向”,这也是不对的。从技术上讲,您不应该做 mat3(MVM) * normal;你应该做正常的* inverseOfMVM。 en.wikibooks.org/wiki/GLSL_Programming/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多