Если я правильно вас понимаю, вы пытаетесь повернуть треугольники независимо друг от друга? В этом случае вам нужно будет использовать 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();
другой мудрый верхний поворот будет применен к обоим треугольникам.
Кроме того, я заметил, что вы сказали, что вам нужны два скрещенных «прямоугольника». Если это так, вам понадобятся четыре треугольника или один квадрат для каждого. Так один Quad, прямоугольник, будет:
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();
Надеется, что это помогает.
Ahh, теперь мы куда-то попадаем! Хорошо, это просто. Что касается вращения, вы можете избежать этого и перейти непосредственно к рисованию квадроциклов друг над другом. Отправляясь на основе ваших исходных значений 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();
Пример с Quads:
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();
Если это просто для примера, этот код должен быть в порядке. Тем не менее, если вы собираетесь делать краткими из них, тогда вам захочется сохранить код рендеринга quad в объект буфера вершин, а затем визуализировать несколько объектов буфера вершин.
Я постараюсь быть более ясным: мне просто нужно два треугольника, которые должны быть скрещены в середине (как эти старые 3d модели деревьев, это» трудно объяснить). Они должны вращаться вместе, которые я получил до сих пор, но не сами скрещенные треугольники. – Patrick
Ну, у меня есть два решения для дерева. Мне нужно знать, если вы имеете в виду деревья, которые они использовали в играх, где листья, где только два скрещенных квадроцикла с текстурой на них, или если вы имеете в виду пирамидальную форму для листьев. В противном случае я не уверен, что вы подразумеваете под двумя скрещенными треугольниками. Может быть, вы могли бы посмеяться над чем-то простым в краске. Я обещаю, что не буду оценивать вас на вашем программистом. – lrussell851
Я имею в виду деревья из игр, где пересекались два текстурированных квадроцикла. Если смотреть на кнопку, она должна выглядеть как +, а по сторонам - как треугольник. Может что-то нарисовать завтра, но я думаю, что с + становится ясно? В следующий раз я рисую напрямую. – Patrick