我用OpenGL绘制一个球体,它将被glRotate(),glScale(),glTranslate()转换。 如何在不计算我自己的所有变换的情况下获得对象的绝对位置?
我需要用于设置相机眼睛位置的坐标。
答案 0 :(得分:2)
使用这些转换时,您正在操纵modelviewmatrix
要获取当前版本(http://linux.die.net/man/3/glgetfloatv)
void glGetFloatv(
GLenum pname,
GLfloat * params
);
例如:
float modelview[16];
// save the current modelview matrix
glPushMatrix();
// get the current modelview matrix
glGetFloatv(GL_MODELVIEW_MATRIX , modelview);
应该为您提供当前矩阵,将起始矢量/顶点/坐标乘以此矩阵将为您提供绝对世界坐标。
编辑:在制作应用程序时,您通常需要控制每个对象的绝对坐标,操纵它们,并使用opengl转换将它们绘制到定义的位置。答案 1 :(得分:1)
对象通常在一个坐标系中建模,然后缩放,平移和旋转到您正在构建的世界中。世界坐标是通过存储在ModelView矩阵中的建模变换来变换对象坐标的结果。但是,OpenGL没有世界坐标的概念。世界坐标纯粹是一种应用程序构造。
通过ModelView矩阵转换对象坐标以生成眼睛坐标。
来自opengl.org: 9.120如何找到仅由ModelView矩阵转换的顶点的坐标?
获取顶点的眼睛坐标空间值(即由ModelView矩阵变换的对象空间顶点)通常很有用。您可以通过检索当前的ModelView矩阵并执行简单的向量/矩阵乘法来获得此结果。
要使矩阵使用类似的东西
float fvViewMatrix[ 16 ];
glGetFloatv( GL_MODELVIEW_MATRIX, fvViewMatrix );
您可以在此处阅读有关opengl转换的更多信息:http://www.opengl.org/resources/faq/technical/transformations.htm