2010-10-10 80 views
0

我正在學習OpenGL(具體地說,使用JOGL),並試圖創建一個直角三角棱鏡。我知道你可以用glutWire/SolidCylinder創建一個等邊棱鏡,並且可以創建少量的切片(顯然,三角形爲3)。在OpenGL中創建一個直角三角棱鏡

所以我想知道是否還有其他方法來製作棱鏡,或者如果有某種方法可以縮放等邊三角形以將其變成直角三角形?

回答

0

我另外發現(至少在JOGL中,其他地方不知道)glutSolidCylinder不能正常工作 - 終端在不同側面繪製,這會給你一個非常奇怪的外形。

所以我最終創建了一個方法,創建一個單位直角三角棱鏡,然後您可以根據需要進行旋轉和縮放。有可能更好的方法來做到這一點,所以意見,歡迎:

private void unitTriangularPrism(GL gl, boolean solid){ 
    // back endcap 
    gl.glBegin(solid ? GL.GL_TRIANGLES : GL.GL_LINES); 
    gl.glVertex3f(1f, 0f, 0f); 
    gl.glVertex3f(0f, 0f, 0f); 
    gl.glVertex3f(0f, 1f, 0f); 
    gl.glEnd(); 

    // front endcap 
    gl.glBegin(solid ? GL.GL_TRIANGLES : GL.GL_LINES); 
    gl.glVertex3f(1f, 0f, 1f); 
    gl.glVertex3f(0f, 0f, 1f); 
    gl.glVertex3f(0f, 1f, 1f); 
    gl.glEnd(); 

    // bottom 
    gl.glBegin(solid ? GL.GL_QUADS : GL.GL_LINES); 
    gl.glVertex3f(0f, 0f, 0f); 
    gl.glVertex3f(1f, 0f, 0f); 
    gl.glVertex3f(1f, 0f, 1f); 
    gl.glVertex3f(0f, 0f, 1f); 
    gl.glEnd(); 

    // back 
    gl.glBegin(solid ? GL.GL_QUADS : GL.GL_LINES); 
    gl.glVertex3f(0f, 0f, 0f); 
    gl.glVertex3f(0f, 1f, 0f); 
    gl.glVertex3f(0f, 1f, 1f); 
    gl.glVertex3f(0f, 0f, 1f); 
    gl.glEnd(); 

    // top 
    gl.glBegin(solid ? GL.GL_QUADS : GL.GL_LINES); 
    gl.glVertex3f(0f, 1f, 0f); 
    gl.glVertex3f(1f, 0f, 0f); 
    gl.glVertex3f(1f, 0f, 1f); 
    gl.glVertex3f(0f, 1f, 1f); 
    gl.glEnd(); 
} 
+0

除了一個事實,即所有的呼叫都在OpenGL 3棄用,我想你想LINELOOP,沒有線,線框的情況下(雖然冗餘可能會導致所有的邊沿保存一個輸出),這是一個非常明確的直接方法。 – 2010-10-11 01:44:08

+0

與這些調用等價的OpenGL 3是什麼? – dimo414 2010-10-12 18:20:53