当前位置:编程学习 > C/C++ >>

OpenGL的矩阵

1.
OpenGL中的矩阵
m[0]  m[4]  m[8]    m[12] 
m[1]  m[5]  m[9]    m[13] 
m[2]  m[6]  m[10]  m[14] 
m[3]  m[7]  m[11]  m[15] 

对它定义的新坐标系,OpenGL是这么说的:
x轴向量(m[0], m[1], m[2]);
y轴向量(m[4], m[5], m[6]);
z轴向量(m[8], m9], m[10]);
原点(m[12], m[13], m[14]);

2.
回过头,矩阵只不过是方程组的一种表达形式,这个矩阵对应的方程组应为:
x  = m[0]x   + m[1]y   +m[2]z   + m[3]w;
y  = m[4]x   + m[5]y   +m[6]z   + m[7]w;
z  = m[8]x   + m[9]y   +m[10]z + m[11]w;
w = m[12]x + m[13]y +m[14]z + m[15]w;
 

3.
因为w和w’都是1,由这个方程组我唯一能看出来的是m[3],m[7],m[11]跟平移量有关系,它们和原点(Ox,Oy,Oz)有如下关系:
m[3] = - (m[0]*Ox + m[1]*Oy +m[2]*Oz)
m[7] = - (m[4]*Ox + m[5]*Oy +m[6]*Oz)
m[11] = - (m[8]*Ox + m[9]*Oy +m[10]*Oz)

疑问:
??这跟OpenGL所说的貌似矛盾了。

一种说法
有筒子提出,我在2. 还原的方程组不正确,正确的方程组是
x  = m[0]x   + m[4]y   +m[8]z   + m[12]w;
y  = m[1]x   + m[5]y   +m[9]z   + m[13]w;
z  = m[2]x   + m[6]y    +m[10]z + m[14]w;
w = m[3]x   + m[7]y   +m[11]z  + m[15]w;

我个人并不同意这种说法。
即便如此,原点坐标也并不是OpenGL所说的12-14,更何况,这个方程组决定的坐标系的x轴方向已经变成了(m[0],m[4],m[8])。

补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,