转换后如何获取对象的新坐标?

时间:2012-11-24 12:26:20

标签: c opengl

如何在转换后学习对象的新坐标?

前:

a,x,y,z any float numbers

glTranslatef( x, y,z ) ;
glRotate( a,0.0f, 1.0f, 0.0f ) ;

sketchSomething() ;

我希望在转换后知道对象的坐标。

2 个答案:

答案 0 :(得分:3)

OpenGL不会在对象中“思考”。当您绘制一个对象时,OpenGL会自己处理几何体的每个图元(点,线,三角形),绘制它然后忘记它。转换只会影响屏幕上的显示位置。

但当然可以假设几何形状在某个模型空间中形成一个对象,然后转换为世界空间,然后是眼睛空间,然后是剪辑空间,最后是NDC空间。

关于你的问题:glTranslate,glRotate和其他一些函数不操纵对象。它们在当前活动堆栈顶部的矩阵上应用变换矩阵就地乘法。之前可能已经应用了无数次的变换。所以你可以做的是从OpenGL中检索当前矩阵并自己进行转换。这为您提供了变换空间中的对象几何体。当然,您可以将中心位置矢量乘以产生对象的中心位置。

此外,我强烈建议您使用专用的矩阵数学库(GLM,Eigen,linmath.h),而不是依赖OpenGL的矩阵例程,使用它进行所有转换矩阵运算。一,并使用 glLoadMatrix glUniformMatrix 将准备好的矩阵加载到OpenGL中。

答案 1 :(得分:0)

这取决于你正在寻找什么样的坐标。

如果您想要2D屏幕坐标,可以使用gluProject()将当前矩阵应用于单个点。

如果你想将当前的模型视图矩阵应用到一个点上,你可能最好只读回那个矩阵并自己应用变换。

请注意,如果您只是希望对象原点在世界空间中的位置,则只需要读取矩阵的平移部分,而不是实际执行完全变换。