经过一些变换之后,我如何才能学习对象的新坐标?
前任:
a,x,y,z any float numbers
glTranslatef( x, y,z ) ;
glRotate( a,0.0f, 1.0f, 0.0f ) ;
sketchSomething() ;
我想知道转换后物体的坐标。
最佳答案
OpenGL不在对象中“思考”。当您绘制一个对象时,OpenGL会单独处理几何体的每个基本体(点、线、三角形),绘制它,然后忘记它。转换只会影响屏幕上的显示位置。
但当然,您可以假设几何体在某个模型空间中形成一个对象,该对象被转换为一个世界空间,然后是眼睛空间,然后是剪辑空间,最后是NDC空间。
关于您的问题:glTranslate、glRotate和其他一些函数不处理对象。它们在当前活动堆栈顶部的矩阵上就地应用转换矩阵乘法。以前可能应用了无限数量的转换。所以你能做的就是从OpenGL中检索当前的矩阵并自己进行转换。这将为您提供变换空间中的对象几何体。当然,你可以乘以一个中心位置向量,得到物体的中心位置。
另外,我强烈建议您不要依赖OpenGL的矩阵例程(这些例程使用起来很麻烦),而是使用一个专用的矩阵数学库(GLM,Eigen,linmath.h),使用该库执行所有转换矩阵操作,并使用glLoadMatrix或glUniformMatrix将准备好的矩阵加载到OpenGL中。