Search code examples
javaopenglprocessingvertex

Draw two crossed triangles in OpenGL


I'm doing my first steps with OpenGL in processing.org. I'd like to draw two crossed triangles, but don't really get how to rotate the triangles to cross them.

PGraphicsOpenGL pgl = (PGraphicsOpenGL) g;
GL gl = pgl.beginGL();

gl.glTranslatef(width/2, height/2, 0);
gl.glRotatef(a, 0, 0, 0);

gl.glBegin(GL.GL_TRIANGLES);
gl.glColor4f(0.7, 0.1, 0.7, 0.8);
gl.glVertex3f(0, 0, 0);
gl.glVertex3f(0, 50, 0);
gl.glVertex3f(25, 0, 25);
gl.glEnd();

gl.glRotatef(90, 1, 0, 0);
gl.glBegin(GL.GL_TRIANGLES);
gl.glColor4f(0.1, 0.9, 0.7, 0.8);
gl.glVertex3f(0, 0, 0);
gl.glVertex3f(0, 50, 0);
gl.glVertex3f(25, 0, 25);
gl.glEnd();

pgl.endGL();

The triangles should be crossed like these old 3D models of trees. They should rotate and move as one object in later use, which I figured works with pop and push around both vertices, I just can't figure out the rotation to get these two triangles together.


Solution

  • Thanks to your code and some geometry on paper, I finally found the solution(s) for my problem:

    Crossed-triangle solution:

    gl.glBegin(GL.GL_TRIANGLES);
      gl.glColor4f(0.1, 0.9, 0.7, 0.8);
      gl.glVertex3f(-25, 0, 0);    // lower left vertex
      gl.glVertex3f( 25, 0, 0);    // lower right vertex
      gl.glVertex3f( 0,  50, 0);    // upper vertex
    gl.glEnd();
    
    gl.glBegin(GL.GL_TRIANGLES);
      gl.glColor4f(0.9, 0.1, 0.7, 0.8);
      gl.glVertex3f(0, 0, 25);    // lower left vertex
      gl.glVertex3f( 0, 0, -25);    // lower right vertex
      gl.glVertex3f( 0,  50, 0);    // upper vertex
    gl.glEnd();
    

    Or the same with four triangles:

    gl.glBegin(GL.GL_TRIANGLES);
      gl.glColor4f(0.7, 0.1, 0.7, 0.8);
      gl.glVertex3f(0, 0, 0);
      gl.glVertex3f(0, 50, 0);
      gl.glVertex3f(25, 0, 25);
    gl.glEnd();
    
    gl.glBegin(GL.GL_TRIANGLES);
      gl.glColor4f(0.1, 0.9, 0.7, 0.8);
      gl.glVertex3f(0, 0, 0);
      gl.glVertex3f(-25, 0, -25);
      gl.glVertex3f(0, 50, 0);
    gl.glEnd();
    
    gl.glBegin(GL.GL_TRIANGLES);
      gl.glColor4f(0.1, 0.1, 0.9, 0.8);
      gl.glVertex3f(0, 0, 0);
      gl.glVertex3f(25, 0, -25);
      gl.glVertex3f(0, 50, 0);
    gl.glEnd();
    
    gl.glBegin(GL.GL_TRIANGLES);
      gl.glColor4f(0.1, 0.9, 0.7, 0.8);
      gl.glVertex3f(0, 0, 0);
      gl.glVertex3f(-25, 0, 25);
      gl.glVertex3f(0, 50, 0);
    gl.glEnd();