我想旋轉一個多邊形到位,但它保持旋轉。Opengl glRotatef旋轉一個多邊形,將不會旋轉到位
要旋轉,我通過查找每個頂點的平均位置來計算中心。我稱之爲旋轉函數,然後使用中心調用翻譯將其移動到屏幕中間。它最終會居中,但它仍然會旋轉,就好像它不是。任何想法,我可能做錯了什麼?
這裏是我的代碼:
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();
}
下面是如何計算的中心:因爲我的擠壓作品我並不需要添加x和y爲頂點的方式
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;
}
的兩面,但我仍然保持一致。
這是我如何繪製形狀:
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();
}
}
您是否打算在第二個翻譯中忽略「置換[2]」?你能告訴你如何計算位移值嗎? – user1118321
我認爲這可能已經做到了。我使用for循環遍歷每個頂點並將它們彙總在一起。但我正在做的是繪製一個基於用戶輸入的多邊形,然後擠壓它。我將編輯以顯示我認爲正在工作的內容,幷包括我如何計算替換。 – user2833514
看起來它在工作,但它有相同的問題。我仍然不明白爲什麼。 – user2833514