2010-10-10 4 views
0

J'apprends OpenGL (spécifiquement, en utilisant JOGL) et j'essaye de créer un prisme triangulaire à angle droit. J'ai appris que vous pouvez créer un prisme équilatéral avec glutWire/SolidCylinder et un petit nombre de tranches (3 pour un triangle, évidemment). Donc, je me demande s'il y a une autre façon de faire un prisme, ou s'il y a un moyen de mettre à l'échelle un triangle équilatéral pour le transformer en triangle rectangle?Créer un prisme triangulaire à angle droit dans OpenGL

Répondre

0

J'ai également trouvé que (au moins dans JOGL, aucune idée ailleurs) glutSolidCylinder ne fonctionne pas correctement - les plateaux sont dessinés à une rotation différente des côtés, vous donnant une forme très étrange. J'ai donc fini par créer une méthode qui crée un prisme triangulaire droit-unité que vous pouvez ensuite faire pivoter et mettre à l'échelle si nécessaire. Il y a probablement beaucoup de meilleures façons de le faire, si les commentaires sont les bienvenus:

private void unitTriangularPrism(GL gl, boolean solid){ 
    // back endcap 
    gl.glBegin(solid ? GL.GL_TRIANGLES : GL.GL_LINES); 
    gl.glVertex3f(1f, 0f, 0f); 
    gl.glVertex3f(0f, 0f, 0f); 
    gl.glVertex3f(0f, 1f, 0f); 
    gl.glEnd(); 

    // front endcap 
    gl.glBegin(solid ? GL.GL_TRIANGLES : GL.GL_LINES); 
    gl.glVertex3f(1f, 0f, 1f); 
    gl.glVertex3f(0f, 0f, 1f); 
    gl.glVertex3f(0f, 1f, 1f); 
    gl.glEnd(); 

    // bottom 
    gl.glBegin(solid ? GL.GL_QUADS : GL.GL_LINES); 
    gl.glVertex3f(0f, 0f, 0f); 
    gl.glVertex3f(1f, 0f, 0f); 
    gl.glVertex3f(1f, 0f, 1f); 
    gl.glVertex3f(0f, 0f, 1f); 
    gl.glEnd(); 

    // back 
    gl.glBegin(solid ? GL.GL_QUADS : GL.GL_LINES); 
    gl.glVertex3f(0f, 0f, 0f); 
    gl.glVertex3f(0f, 1f, 0f); 
    gl.glVertex3f(0f, 1f, 1f); 
    gl.glVertex3f(0f, 0f, 1f); 
    gl.glEnd(); 

    // top 
    gl.glBegin(solid ? GL.GL_QUADS : GL.GL_LINES); 
    gl.glVertex3f(0f, 1f, 0f); 
    gl.glVertex3f(1f, 0f, 0f); 
    gl.glVertex3f(1f, 0f, 1f); 
    gl.glVertex3f(0f, 1f, 1f); 
    gl.glEnd(); 
} 
+0

à part le fait que tous ces appels sont déconseillés dans OpenGL 3, et je pense que vous voulez LINELOOP, pas de lignes, dans le cas wireframe (bien que la redondance fait probablement en sorte que tous les bords en sauvegardent un de toute façon), c'est une approche très claire et directe. –

+0

Quel est l'équivalent OpenGL 3 de ces appels? – dimo414

Questions connexes