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.
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();