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坐标变换的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL中的坐标变换矩阵变换

OpenGL学习脚印: 坐标变换过程(vertex transformation)

OpenGL里的坐标系统以及其变换

OpenGl从零开始之坐标变换

梳理 Opengl ES 3.0 顶点坐标变换

详解OpenGL的坐标系投影和几何变换