2009-10-22 186 views
0

我只是似乎无法弄清楚我的脑海。我试图在3D空间中移动一个对象。C++ OpenGL坐标转换

如果我在5,15,5点,并使用OpenGL函数来改变模型视图....

glTranslatef(10.0f, 4.0f, 4.0f); 
glRotatef(33.0f, 1.0f, 0.0f, 0.0f); 
glTranslatef(10.0f, 4.0f, 4.0f); 

有没有一种方法可以让我找出那个点结束(以世界/全球坐标)? 我可以做一些矩阵计算,这会让我回到20,26,23(或每个新的坐标位置是什么)?

请帮忙,我一直坚持这个这么久!

回答

4

尝试以下方法:

1)推入当前矩阵成堆叠; 2)加载身份并应用您的转换; 3)将得到的转换矩阵转换成一些临时变量。 glGet或类似的东西会有所帮助; 4)从堆栈中弹出矩阵;

现在你有你的转换矩阵。用这个矩阵乘你的点来预测转换后的点坐标。

+0

我想我得到它现在:)沿着这些路线的东西... http://www.gamedev.net/reference/articles/article877.asp – michael 2009-10-22 15:52:00

0

肯定:检查出http://research.cs.queensu.ca/~jstewart/454/notes/pipeline/

总之,所有这些调用的减少到单一矩阵,乘以到的点。

SadSido的方法一定会让你得到最终的矩阵,但它可能并不会伤害到实际了解幕后发生了什么。上面的计算将导致的线性代数方程如下:

POUT = [mTranslate] * [mRotate] * [mTranslate] *销

其中mTranslate =翻译呼叫(矩阵进行翻译),和mRotate =旋转调用(围绕任意轴旋转的矩阵)。计算一下,你很好走!

+0

谢谢你们的答案,当我得到一点更舒服所有这些我想我会深入研究矩阵数学 – michael 2009-10-22 15:51:22