在OpenGL中创建直角三棱柱

问题描述 投票:0回答:1

我正在学习 OpenGL(特别是使用 JOGL),我正在尝试创建直角三角棱镜。我了解到您可以使用

glutWire
/
SolidCylinder
和少量切片(显然是 3 个三角形)来创建等边棱镜。

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

opengl geometry jogl
1个回答
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();
}
© www.soinside.com 2019 - 2024. All rights reserved.