2010-10-10 101 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