我有一个对象,比如x,y,z就原点而言.
我想对点应用一些变换,比如旋转和平移,并在变换点渲染对象.我正在使用glTranslatef()
和glRotatef()
功能.它看起来像这样:
glTranslatef(x,y,z);
glRotatef(Ang,0,1,0); // rotated around Y axis at an arbitrary angle
glTranslatef(xt,yt,zt); // further translation
<render the object>
Run Code Online (Sandbox Code Playgroud)
即使它使我免于复杂的矩阵变换操作,我也不知道最终位置相对于原点的实际坐标值.有没有一种方法可以在不经过矩阵运算的情况下检索变换点的实际位置坐标?
Vyk*_*tor 13
我先给你一些理论.OpenGL使用矩阵4x4
和矢量(点坐标),长度为4
(3D).
我们有一个向量X = (x,y,z,1)
.我希望你知道如何乘法矩阵.让我们说你要翻译你的观点
.要做到这一点,你需要建立这样的翻译矩阵:V = (vx,vy,vz)
你将乘以两个矩阵(矩阵*向量/点)Y = TX
:
这么复杂(而不仅仅是添加X + V
)这样做的原因是你可以通过用不同的值填充相同的矩阵来围绕轴旋转你的点.它被称为旋转矩阵:
最好的部分是你可以链接那些矩阵.当你需要用这些规则绘制点时:
T1
R1
T2
您可以准备一个矩阵,它将立即完成所有工作:
F =
T1R1T2
然后立即应用所有这些转换:Y = FX
.
请注意矩阵乘法不是可交换的,所以顺序很重要.
OpenGL在内部使用那些矩阵(比较矩阵的类型更少).您可以使用命令获取当前转换矩阵(示例来自此处):
glGetDoublev(GL_MODELVIEW_MATRIX, redTransformationMatrix);
Run Code Online (Sandbox Code Playgroud)
下面是如何正确地表示这些数据(详细信息点击这里):
除最后一张之外的所有图像均来自wikipedia.org