Если я правильно вас понимаю, вы пытаетесь вращать треугольники независимо друг от друга? В этом случае вам нужно будет использовать gl.PushMatrix () перед треугольником и gl.PopMatrix (); после треугольника. Пример:
gl.PushMatrix();
{
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.PopMatrix();
gl.PushMatrix();
{
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();
}
gl.PopMatrix();
в противном случае верхнее вращение будет применено к обоим треугольникам.
Кроме того, я заметил, что вы сказали, что вам нужно два скрещенных "прямоугольника". Если это так, вам понадобится 4 треугольника или один квад для каждого. Итак, один квад, прямоугольник, будет:
gl.PushMatrix();
{
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.glVertex3f(25, 0, 25);
gl.glVertex3f(0, 50, 0);
gl.glVertex3f(25, 50, 25);
gl.glEnd();
}
gl.PopMatrix();
или даже лучше
gl.PushMatrix();
{
gl.glTranslatef(width/2, height/2, 0);
gl.glRotatef(a, 0, 0, 0);
gl.glBegin(GL.GL_QUADS);
gl.glColor4f(0.7, 0.1, 0.7, 0.8);
gl.glVertex3f(0, 0, 0);
gl.glVertex3f(0, 50, 0);
gl.glVertex3f(25, 50, 25);
gl.glVertex3f(25, 0, 25);
gl.glEnd();
}
gl.PopMatrix();
Надеюсь, это поможет.
Ааа, теперь мы куда-то добираемся! Хорошо, это очень просто. Что касается вращения, вы можете избежать этого и перейти непосредственно к рисованию четырехугольников друг на друге. На примере исходных значений 25 и 50 приведен пример с треугольниками:
gl.PushMatrix();
{
gl.glBegin(GL.GL_TRIANGLES);
gl.glColor4f(0.7, 0.1, 0.7, 0.8);
gl.glVertex3f(-12.5, -25, -12.5);
gl.glVertex3f(-12.5, 25, -12.5);
gl.glVertex3f(12.5, -25, -12.5);
gl.glVertex3f(12.5, -25, -12.5);
gl.glVertex3f(-12.5, 25, -12.5);
gl.glVertex3f(12.5, 25, -12.5);
gl.glVertex3f(0, -25, 0);
gl.glVertex3f(0, 25, 0);
gl.glVertex3f(0, -25, -25);
gl.glVertex3f(0, -25, -25);
gl.glVertex3f(0, 25, 0);
gl.glVertex3f(0, 25, -25);
gl.glEnd();
}
gl.PopMatrix();
Пример с квадраторами:
gl.PushMatrix();
{
gl.glBegin(GL.GL_QUADS);
gl.glColor4f(0.7, 0.1, 0.7, 0.8);
gl.glVertex3f(-12.5, -25, -12.5);
gl.glVertex3f(-12.5, 25, -12.5);
gl.glVertex3f(12.5, 25, -12.5);
gl.glVertex3f(12.5, -25, -12.5);
gl.glVertex3f(0, -25, 0);
gl.glVertex3f(0, 25, 0);
gl.glVertex3f(0, 25, -25);
gl.glVertex3f(0, -25, -25);
gl.glEnd();
}
gl.PopMatrix();
Если это только для примера, тогда этот код должен подойти. Однако, если вы собираетесь рендерить кратные из них, вы захотите сохранить код рендеринга с четырьмя точками в объекте буфера вершин, а затем отобразить несколько объектов буфера вершин.