在OpenGL中,我可以轻松地将三角形旋转如下所示:
glRotate(90, 1, 0, 0);
glBegin(GL_TRIANGLES);
glVertex3f(-1,0,0);
glVertex3f(1,0,0);
glVertex3f(0,1,0);
glEnd();
glRotate(-90, 1, 0, 0);
但是,我只想旋转一个顶点,而不是构成三角形的所有三个顶点,但是我仍然希望它最终绘制三角形。
我已经尝试过类似的事情,但是没有成功:
glBegin(GL_TRIANGLES);
// Rotate only this vertex.
glRotate(90, 1, 0, 0);
glVertex3f(-1,0,0);
glRotate(-90, 1, 0, 0);
glVertex3f(1,0,0);
glVertex3f(0,1,0);
glEnd();
有任何想法吗?
最佳答案
您不能在glBegin和glEnd之间放置glRotate调用。
有关完整说明,请参见http://www.cs.uccs.edu/~ssemwal/glman.html。
要回答您的问题,如果只想旋转一个顶点,则需要在调用glVertex3f之前手动进行。
在您的特定情况下(绕x轴旋转),代码如下所示:
glBegin(GL_TRIANGLES);
// Rotate only the vertex <x,y,z> about the x axis an angle of theta.
glVertex3f(x, y*cos(theta) - z*sin(theta), y*sin(theta) + z*cos(theta));
glVertex3f(1,0,0);
glVertex3f(0,1,0);
glEnd();
如果需要绕不同的轴或通用轴旋转,请参见有关3D旋转矩阵的Wikipedia页面:http://en.wikipedia.org/wiki/Rotation_matrix#Basic_rotations。