繁体   English   中英

OpenGL中矩阵乘法的顺序

[英]Order of matrix multiplications in OpenGL

glDisable(GL_DEPTH_TEST);
glViewport(0/*left*/, 0/*botton*/, 200/*width*/, 200/*height*/); //T4   
glMatrixMode(GL_PROJECTION);    
glLoadIdentity();   
gluPerspective(90 /*fov*/, 1/*aspect*/, 1/*fp*/, 1000/*bp*/); //T3
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity();     
gluLookAt(0/*eyex*/,0/*eyey*/,0/*eyez*/, 0/*lax*/,0/*lay*/,-1/*laz*/, 0/*upx*/,1/*upy*/,0/*upz*/); //T2
glTranslatef(-15.0, -10.0, -49.0); //T1
glBegin(GL_POINTS);
glVertex4f(0, 0, -1, 1);
glEnd();

鉴于此代码,矩阵乘法的顺序是什么? 我必须知道如何跟踪并验证纸上的计算?

我怀疑要遵循顺序,但还没有找到验证它的方法:v = [0,0,-1,1]

T4 * T3 * T2 * T1 * v

这个对吗?

这大多是正确的,但glViewport (...)本身并没有定义矩阵。 这是一个简单的偏差和缩放操作。 它定义了X和Y中的总宽度,高度和偏移量。还有另一个缺少的组件,即深度范围。

乘法按顺序发生,但由于这些是列主矩阵并后乘,所以从概念上说,从右边开始,然后向左行进。 T4因为它本身不是一个矩阵,所有这一切的最终结果是一个剪辑空间顶点坐标。 您仍需要将v.xyz除以vw ,然后执行视口转换以完全复制GL所执行的操作。

可以使用矩阵实现视口变换,但您还需要考虑glDepthRange (...) ,它将Z坐标从NDC空间偏移并缩放到窗口空间。

这就是这样一个矩阵的样子:

行主视口矩阵

4.1坐标转换下,这里将更详细地讨论整个过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM