1

我正在尝试将多边形旋转到位,但它一直在旋转。

为了旋转,我通过找到每个顶点的平均位置来计算中心。我调用旋转函数,然后使用中心调用平移,将其移动到屏幕中间。它确实最终居中,但它仍然旋转,好像它不是一样。关于我可能做错了什么的任何想法?

这是我的代码:

void Polygon::DrawPolygon()
{
    glPushMatrix();
    glLoadMatrixf(matrix);
    glTranslatef(displace[0], displace[1], displace[2]);
    glRotatef(rotation[0], 1, 0, 0);
    glRotatef(rotation[1], 0, 1, 0);
    glRotatef(rotation[2], 0, 0, 1);
    glTranslatef(-displace[0], -displace[1], displace[2]);
    displace[0] = 0; displace[1] = 0; displace[2] = 0;
    glGetFloatv(GL_MODELVIEW_MATRIX, matrix);
    DrawMaterial();
    DrawFaces();
    ConnectFaces();
    glPopMatrix();
}

这是我计算中心的方法:

void Polygon::FindCenter()
{
    float x = 0;
    float y = 0;
    float z = 0;

    for(int j = 0; j < 2; j++)
    {
        for(int i =  0; i < vertexCount; i++)
        {
            x += vertices[i][0];
            y += vertices[i][1];
            z += vertices[i][2] + extrusionDistance * j;
        }
    }
    x = x / (vertexCount * 2);
    y = y / (vertexCount * 2);
    z = z / (vertexCount * 2);

    displace[0] = x;
    displace[1] = y;
    displace[2] = z;
}

由于我的挤压工作方式,我不需要为两个面的顶点添加 x 和 y,但我还是做了保持一致。

这是我绘制形状的方法:

void Polygon::DrawFaces()
{
    for(int j = 0; j < 2; j++)
    {
        glBegin(GL_POLYGON);
        for(int i = 0; i < vertexCount; i++)
        {
             glVertex3f(vertices[i][0], vertices[i][1], j*extrusionDistance);
        }
        glEnd();
    }
}

void Polygon::ConnectFaces()
{
    for(int i = 0; i < vertexCount; i++)
    {
        glBegin(GL_POLYGON);
        glVertex3f(vertices[i][0], vertices[i][1], 0);
        glVertex3f(vertices[i][0], vertices[i][1], extrusionDistance);
        glVertex3f(vertices[(i+1)%vertexCount][0], vertices[(i+1)%vertexCount][1], extrusionDistance);
        glVertex3f(vertices[(i+1)%vertexCount][0], vertices[(i+1)%vertexCount][1], 0);
        glEnd();
    }
}
4

1 回答 1

0

我看到一些对我来说很奇怪的事情:

1) 你在调用andglLoadMatrixf(matrix)之前打电话。根据您正在加载的矩阵中的内容,这会改变事情。glTranslate()glRotate()

2)您的FindCenter()方法通过vertex[i][2]在 z 的计算中包括 来计算中心,但是当您实际在 中绘制面时DrawFaces(),您不包括vertex[i][2]部分,只包括extrusion * j部分。所以你画的不是你计算中心的东西。

于 2013-11-05T06:02:20.680 回答