Si je vous comprends bien, vous essayez de faire pivoter les triangles indépendamment les uns des autres? Dans ce cas, vous devrez utiliser gl.PushMatrix() avant le triangle et gl.PopMatrix(); après le triangle. Ex:
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();
Sinon, la rotation supérieure sera appliquée aux deux triangles.
Aussi, j'ai remarqué que vous avez dit que vous avez besoin de deux "rectangles" croisés. Si c'est le cas, vous aurez besoin de 4 triangles ou d'un quad pour chacun. Donc, un Quad, rectangle, serait la suivante:
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();
ou mieux encore
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();
Hope this helps.
Ahh, maintenant nous allons quelque part! Ok c'est très simple. En ce qui concerne la rotation, vous pouvez éviter cela et aller directement à dessiner les quads les uns sur les autres. Voulez-vous en fonction de vos valeurs initiales de 25 et 50 voici un exemple avec des triangles:
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();
Exemple avec 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();
Si cela est juste un exemple, alors ce code doit être bien. Cependant, si vous allez en afficher des multiples, vous allez vouloir stocker le code de rendu quadruple dans un objet de tampon de vertex et ensuite rendre plusieurs des objets de tampon de vertex.
Je vais essayer d'être plus clair: J'ai juste besoin de deux triangles, qui devraient être franchies au milieu (comme ces vieux modèles 3D des arbres, il s difficile à expliquer). Ils devraient tourner ensemble, ce que j'ai obtenu jusqu'ici, mais pas les triangles croisés eux-mêmes. – Patrick
Eh bien, j'ai deux solutions pour vous pour l'arbre. Ce que je dois savoir, c'est si vous voulez dire les arbres qu'ils utilisaient dans les jeux où les feuilles n'étaient que deux quads croisés avec une texture sur eux ou si vous voulez dire un sommet en forme de pyramide pour les feuilles. Sinon, je ne suis pas sûr de ce que vous voulez dire par deux trianges croisées. Peut-être que tu pourrais te moquer de quelque chose de simple en peinture très vite. Je promets que je ne vous noterai pas sur votre art programmeur. – lrussell851
Je veux dire les arbres des jeux, où deux quads texturés où croisés. Si vu du bouton, il devrait ressembler à un +, et à partir des côtés comme un triangle. Peut dessiner quelque chose demain, mais je suppose qu'avec le + ça devient clair? La prochaine fois, je vais dessiner directement. – Patrick