在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

09-07 10:47