Создайте прямоугольную призму в OpenGL - PullRequest
0 голосов
/ 10 октября 2010

Я изучаю OpenGL (в частности, использую JOGL) и пытаюсь создать прямоугольную треугольную призму.Я узнал, что вы можете создать равностороннюю призму с glutWire / SolidCylinder и небольшим количеством срезов (очевидно, 3 для треугольника).

Поэтому мне интересно, есть ли какой-то другой способ сделатьпризма, или если есть какой-то способ масштабирования равностороннего треугольника, чтобы превратить его в прямоугольный треугольник?

1 Ответ

0 голосов
/ 11 октября 2010

Я также обнаружил, что (по крайней мере, в 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();
}
...