c ++ OpenGL坐标转换

时间:2009-10-22 15:16:49

标签: c++ opengl coordinates

我似乎无法在脑海中弄清楚这一点。我正试图在3D空间中移动一个物体。

如果我在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(或每个新的坐标位置是什么)?

请帮助,我已经坚持这么久了!

2 个答案:

答案 0 :(得分:4)

尝试以下方法:

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

现在你有了转换矩阵。将此点乘以此矩阵,以预测变换后的点坐标。

答案 1 :(得分:0)

绝对:查看http://research.cs.queensu.ca/~jstewart/454/notes/pipeline/

简而言之,所有这些调用都会缩减为单个矩阵,并将其乘以该点。

SadSido的方法肯定能让你得到最终的矩阵,但实际了解幕后发生的事情可能并没有什么坏处。上面的计算将产生以下线性代数方程:

pOut = [mTranslate] * [mRotate] * [mTranslate] * pIn

其中mTranslate =平移调用(转换矩阵),mRotate =旋转调用(围绕任意轴旋转的矩阵)。计算一下,你就好了!