math - 为什么在着色器中反转向量矩阵多序是合法的?

标签 math opengl graphics 3d glsl

当我这样做时图形输出完全困惑,我出于好奇尝试了它。我原以为它会因非法数学运算而崩溃:

 //    gl_Position=Projection*Modelview*Position; <- normal, works fine
 //    gl_Position=Position*Modelview*Projection; <- bad output, but still runs fine
Position是向量,其他是矩阵。

OpenGL 是列优先的,这意味着您只能将矩阵右侧的向量相乘。如果向量是列,则没有数学方法将向量乘以矩阵的左侧,因为内部维度不匹配:4x1 * 4x4

那么为什么我在尝试时实际上会得到输出呢? OpenGL 实际上对向量矩阵乘法做了什么?

最佳答案

向量矩阵与左侧向量的乘法在 GLSL 中被解释为好像您的列向量变成了行向量。

这实际上就像将列向量乘以矩阵的转置。

http://en.wikibooks.org/wiki/GLSL_Programming/Vector_and_Matrix_Operations#Operators

关于math - 为什么在着色器中反转向量矩阵多序是合法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16909486/

相关文章:

c - 创建库时如何正确初始化GLEW?

Java Applet 不适用于 Eclipse 中的任何代码

arrays - 访问 csv 文件中的条目以进行计算 F#

c - 帕斯卡三角形

algorithm - 难以理解描述马尔可夫鉴别算法的公式

graphics - 如何修复使用 Graphicsmagick 收集的损坏的 alpha channel (残留像素)的 .gif?

java - 点不对齐

c - 如何在 C 中使用 nan 和 inf?

opengl - 现在最常用的 OpenGL 窗口管理器是什么?

c++ - OpenGL GLSL - 投影矩阵不工作