在OpenGL中创建一个直角三角形棱镜

时间:2010-10-10 00:24:00

标签: opengl geometry jogl

我正在学习OpenGL(特别是使用JOGL),我正在尝试创建一个直角三角形棱镜。我了解到你可以用glutWire / SolidCylinder创建一个等边棱镜,并且切片数量很少(显然是三角形的3个)。

所以我想知道是否还有其他方法可以制作棱镜,或者是否有某种方法来缩放等边三角形以将其变成直角三角形?

1 个答案:

答案 0 :(得分: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();
}
相关问题