Bonsoir, étant débutant en infographie, je cherche avec OpenGL à placer des points quelconques et tracés le segment si et seulement si le polygone est convexe. Merci pour vos futur conseils.
Merci de votre compréhension.
Bonsoir, étant débutant en infographie, je cherche avec OpenGL à placer des points quelconques et tracés le segment si et seulement si le polygone est convexe. Merci pour vos futur conseils.
Merci de votre compréhension.
Le problème de cette définition est le terme consécutif cela implique d’itérer sur chaque sommets de ton polygone, or OpenGL traite les sommets de manière parallèles.Un polygone est convexe si, et seulement si, les angles entre chaque segment consécutif sont inferieur a 180°
Tu ne pourras donc pas vérifier que ton polygone est convexe lors de la phase de traçage, d’ailleurs cela serait débile, car il est préférable de déterminer si ton polygone est convexe avant de lancer le traçage. Donc l’API OpenGL ne te sera d’aucune utilité sur ce point-là !
Pour tracer le contour d’un polygone avec OpenGL, tu devras tous d’abord créer une zone mémoire en VRAM contenant tous tes sommets (que l’on appelle VertexBuffer ou VBO), pour cela tu devras définir tous les attributs qui composent un sommet (par exemple ces coordonnées polaires : rho et theta)
Ensuite définir le code du VertexShader, celui-ci doit contenir toutes les opérations géométriques à effectuer sur un sommet, tu recevras en entrée un de tes sommets de ton VBO et tu dois déterminer, en sortie, la position cartésienne dans le repère orthogonale de la zone de rendus, ou l’origine de ce repère se trouve au centre de la zone de rendu
Tu devras également créer une deuxième zone mémoire en VRAM contenant la séquence des indices sur ton VBO décrivant le contour de ton polygone (que l’on appelle IBO )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 attribute float rho; attribute float theta; void main(void) { gl_Position.x = rho * cos(radians (theta)); gl_Position.y = rho * sin(radians (theta)); }
Et pour finir un PixelShader, qui détermine la couleur de chaque pixel lors du traçage
Ainsi que la fonction DrawPolygon en OpenGL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void main(void) { /* R G B A */ gl_FragColor = vec4(0.0,0.0,1.0,1.0); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void DrawPolygon(GLuint VBO,GLuint IBO, int vertexCount) { if(Convexe(VBO, IBO, vertexCount)) { glBindBuffer(GL_ARRAY_BUFFER, VBO); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO); glDrawElements(GL_LINE_LOOP, vertexCount, GL_UNSIGNED_INT, 0); } }
Partager