在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();
有什么想法吗?
答案 0 :(得分:2)
你不能在glBegin和glEnd之间放置glRotate调用。
glBegin和glEnd之间只能使用GL命令的子集。该 命令是glVertex,glColor,glIndex,glNormal,glTexCoord,glEvalCoord, glEvalPoint,glMaterial和glEdgeFlag。
有关完整说明,请参阅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旋转矩阵的维基百科页面:http://en.wikipedia.org/wiki/Rotation_matrix#Basic_rotations。