如何围绕三角形的顶点旋转?

时间:2014-03-18 04:14:57

标签: c++ opengl rotation geometry transformation

在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();

有什么想法吗?

1 个答案:

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