C++opengl在glTranslatef之后获得新的顶点位置

C++ opengl get new vertex position after glTranslatef

本文关键字:顶点 位置 glTranslatef 之后 C++opengl      更新时间:2023-10-16

我的三维空间中有一个平面,我想把它移到其他地方,所以我用glTranslate来做。

平面顶点数据为:(0,0,0)、(1,,0),(1,1,0)和(0,1,0)。我通过使用glTranslatef(2.0,0.0,0.0)将对象转换到(2,0,0)的位置

平移后,点数据保持不变,因此如果我想与平面碰撞,视觉位置不是它的实际位置。

是否有方法从MODELVIEW_MIX获取点数据,或者至少有方法找出glTranslate之后的新值?

不要只在实际值上添加2.0来移动它,因为如果我想使用glRotate等,我仍然想要点的位置。

如果你真的不想维护自己的转换矩阵,你可以用获得当前的模型视图矩阵

GLfloat mat[16];
glGetFloatv(GL_MODELVIEW_MATRIX, mat);

然后可以使用标准矩阵乘法将此矩阵应用于顶点。请记住,矩阵是按列的主要顺序排列的。对于输入向量xIn,变换后的向量xOut为:

xOut[0] = mat[0] * xIn[0] + mat[4] * xIn[1] + mat[8] * xIn[2] + mat[12];
xOut[1] = mat[1] * xIn[0] + mat[5] * xIn[1] + mat[9] * xIn[2] + mat[13];
xOut[2] = mat[2] * xIn[0] + mat[6] * xIn[1] + mat[10] * xIn[2] + mat[14];

IMHO,在您自己的代码中跟踪当前的转换矩阵确实是一种更好的方法。除了消除可能对性能有害的glGet()调用外,它还让您走上了使用现代OpenGL(核心配置文件)的道路,在现代OpenGL中,矩阵堆栈和所有相关调用都不存在了。

您可以通过平移和旋转创建一个矩阵,以便使用该矩阵来变换坐标。有许多库可以帮助您创建这样的矩阵和变换坐标。