在OpenGL中转换相机位置

时间:2011-01-10 22:57:03

标签: c++ opengl 3d transform render

我用OpenGL绘制一个球体,它将被glRotate(),glScale(),glTranslate()转换。 如何在不计算我自己的所有变换的情况下获得对象的绝对位置?

我需要用于设置相机眼睛位置的坐标。

2 个答案:

答案 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