1

一些变换后如何学习对象的新坐标?

前任 :

a,x,y,z any float numbers

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

sketchSomething() ;

我想知道这个变换后对象的坐标。

4

2 回答 2

3

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

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

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

此外,我强烈建议您使用专用的矩阵数学库(GLM、Eigen、linmath.h),而不是依赖于 OpenGL 的矩阵例程,这些例程使用起来很麻烦,并使用该库进行所有变换矩阵运算,并且使用glLoadMatrixglUniformMatrix将准备好的矩阵加载到 OpenGL 中。

于 2012-11-24T12:39:39.387 回答
0

It kind of depends on what co-ordinate you're looking for.

If you want a 2D screen-coordinate, you can use gluProject() to apply the current matrices to a single point.

If you want to just apply the current modelview matrix to a point, you're probably better off just reading back that matrix and applying the transform yourself.

Note that if you simply want the position of your object's origin within the world space, you just need to read the translation portion of the matrix and not actually perform a full transform.

于 2012-11-24T12:44:29.527 回答