如果我正確理解你,你正在試圖獨立於彼此旋轉三角形?在這種情況下,您需要在三角形和gl.PopMatrix()之前使用gl.PushMatrix();三角後。例如:
gl.PushMatrix();
{
gl.glTranslatef(width/2, height/2, 0);
gl.glRotatef(a, 0, 0, 0);
gl.glBegin(GL.GL_TRIANGLES);
gl.glColor4f(0.7, 0.1, 0.7, 0.8);
gl.glVertex3f(0, 0, 0);
gl.glVertex3f(0, 50, 0);
gl.glVertex3f(25, 0, 25);
gl.glEnd();
}
gl.PopMatrix();
gl.PushMatrix();
{
gl.glRotatef(90, 1, 0, 0);
gl.glBegin(GL.GL_TRIANGLES);
gl.glColor4f(0.1, 0.9, 0.7, 0.8);
gl.glVertex3f(0, 0, 0);
gl.glVertex3f(0, 50, 0);
gl.glVertex3f(25, 0, 25);
gl.glEnd();
}
gl.PopMatrix();
其他明智的頂部旋轉將應用於兩個三角形。
此外,我注意到你說你需要兩個交叉的「矩形」。如果是這種情況,你將需要4個三角形或每個四邊形。所以,一個四,矩形,應該是:
gl.PushMatrix();
{
gl.glTranslatef(width/2, height/2, 0);
gl.glRotatef(a, 0, 0, 0);
gl.glBegin(GL.GL_TRIANGLES);
gl.glColor4f(0.7, 0.1, 0.7, 0.8);
gl.glVertex3f(0, 0, 0);
gl.glVertex3f(0, 50, 0);
gl.glVertex3f(25, 0, 25);
gl.glVertex3f(25, 0, 25);
gl.glVertex3f(0, 50, 0);
gl.glVertex3f(25, 50, 25);
gl.glEnd();
}
gl.PopMatrix();
甚至更好
gl.PushMatrix();
{
gl.glTranslatef(width/2, height/2, 0);
gl.glRotatef(a, 0, 0, 0);
gl.glBegin(GL.GL_QUADS);
gl.glColor4f(0.7, 0.1, 0.7, 0.8);
gl.glVertex3f(0, 0, 0);
gl.glVertex3f(0, 50, 0);
gl.glVertex3f(25, 50, 25);
gl.glVertex3f(25, 0, 25);
gl.glEnd();
}
gl.PopMatrix();
希望這有助於。
啊,現在我們正在某個地方!好吧,這很簡單。就旋轉而言,您可以避免這種情況,並直接將四邊形繪製在彼此之上。去根據你原有的25和50在這裏值是三角形爲例:
gl.PushMatrix();
{
gl.glBegin(GL.GL_TRIANGLES);
gl.glColor4f(0.7, 0.1, 0.7, 0.8);
gl.glVertex3f(-12.5, -25, -12.5);
gl.glVertex3f(-12.5, 25, -12.5);
gl.glVertex3f(12.5, -25, -12.5);
gl.glVertex3f(12.5, -25, -12.5);
gl.glVertex3f(-12.5, 25, -12.5);
gl.glVertex3f(12.5, 25, -12.5);
gl.glVertex3f(0, -25, 0);
gl.glVertex3f(0, 25, 0);
gl.glVertex3f(0, -25, -25);
gl.glVertex3f(0, -25, -25);
gl.glVertex3f(0, 25, 0);
gl.glVertex3f(0, 25, -25);
gl.glEnd();
}
gl.PopMatrix();
例與四邊形:
gl.PushMatrix();
{
gl.glBegin(GL.GL_QUADS);
gl.glColor4f(0.7, 0.1, 0.7, 0.8);
gl.glVertex3f(-12.5, -25, -12.5);
gl.glVertex3f(-12.5, 25, -12.5);
gl.glVertex3f(12.5, 25, -12.5);
gl.glVertex3f(12.5, -25, -12.5);
gl.glVertex3f(0, -25, 0);
gl.glVertex3f(0, 25, 0);
gl.glVertex3f(0, 25, -25);
gl.glVertex3f(0, -25, -25);
gl.glEnd();
}
gl.PopMatrix();
如果這僅僅是一個例子那麼這段代碼應該罰款。但是,如果您要渲染這些圖像的多個像素,則您需要將四維渲染代碼存儲到頂點緩衝區對象中,然後渲染多個頂點緩衝區對象。
我會盡量更清晰: 我只需要兩個三角形,應在中間交叉(如樹木的這些老的3D模型,這是很難解釋)。它們應該一起旋轉,這是我迄今爲止,但不是交叉的三角形本身。 – Patrick 2010-11-10 17:06:59
那麼我有兩個解決方案爲你的樹。我需要知道的是,如果你指的是他們曾經用過的遊戲中使用的樹木,樹葉上只有兩個交叉的四邊形紋理,或者你的意思是一個金字塔頂部的樹葉。否則我不確定你的意思是兩個交叉的trianges。也許你可以快速地模擬一些簡單的塗料。我保證我不會對你的程序員藝術評分。 – lrussell851 2010-11-10 17:45:48
我指的是來自遊戲的樹木,其中兩個紋理四邊形交叉。如果從按鈕看,它應該看起來像一個+,從兩側看就像一個三角形。明天可以繪製某些東西,但是我猜想+它變得清晰了嗎? 下次我會直接畫畫。 – Patrick 2010-11-10 18:08:33