c++ OpenGL坐标变换
Posted
技术标签:
【中文标题】c++ OpenGL坐标变换【英文标题】:c++ OpenGL coordinate transformation 【发布时间】:2009-10-22 15:16:49 【问题描述】:我只是似乎无法在脑海中弄清楚这一点。我正在尝试在 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(或每个新坐标位置)吗?
请帮忙,我在这个问题上卡了这么久!
【问题讨论】:
【参考方案1】:尝试以下方法:
1) 将当前矩阵压入堆栈; 2)加载身份并应用您的转换; 3) 将生成的转换矩阵转换为一些临时变量。 glGet 或类似的东西会有所帮助; 4) 从栈中弹出矩阵;
现在您有了转换矩阵。将您的点乘以该矩阵以预测变换后点的坐标。
【讨论】:
我想我现在明白了 :) 类似的东西...gamedev.net/reference/articles/article877.asp【参考方案2】:当然:查看http://research.cs.queensu.ca/~jstewart/454/notes/pipeline/
简而言之,所有这些调用都简化为一个矩阵,然后乘以该点。
SadSido 的方法肯定会让您得到结果矩阵,但真正了解幕后发生的事情可能不会有什么坏处。上面的计算将产生以下线性代数方程:
pOut = [mTranslate] * [mRotate] * [mTranslate] * pIn
其中 mTranslate = 平移调用(用于平移的矩阵),而 mRotate = 旋转调用(用于围绕任意轴旋转的矩阵)。计算一下,你就可以开始了!
【讨论】:
感谢您的回答,当我对所有这些感到更熟悉时,我想我会更深入地研究矩阵数学以上是关于c++ OpenGL坐标变换的主要内容,如果未能解决你的问题,请参考以下文章