Texturing 3D objects

Texturing 3D objects

par Diego Polimeni,
Number of replies: 2

Bonsoir,

Je dessine mes objets 3D - le cône et la toupie chinoise - en adaptant la classe glSphere du tutoriel. Je vais donc parler de glSphere à titre d'exemple. Tant qu'il s'agit d'un objet plan j'arrive à lui appliquer des textures. Je voudrais faire de même pour les dessines 3D mais j'ai plusieurs problèmes:

Pour ajouter une texture je devrais identifier les vertex de chaque primitive et lui associer une coordonnée de la texture, sauf que dans  glSphere les dessines de ces primitives ne sont pas évidentes.

De plus, je n'arrive à ajouter des textures que dans la classe vue_opengl, parce que c'est là que je les initialise. Vu que le dessine de la sphère est fait à l’extérieur de vue_opengl, est-ce que je devrais charger et initialiser la texture dans glSphere plutôt?

Auriez-vous des piste à me proposer?

Merci d'avance.



In reply to Diego Polimeni

Re: Texturing 3D objects

par Philippe Guillaume Arsène Servant,
Bonjour,

    je me suis posé la même question que toi et la solution que j'ai trouvée a été de refaire entièrement la classe de dessin du cône ou de la toupie chinoise en calculant les coordonnées des points un peu comme dans glSphere et en dessinant les formes géométriques simples (triangles et carrés) "à la main" ce qui permet d'associer la texture beaucoup plus simplement.
    Pour le problème de portée tu peux dire à openGL quelle texture il doit prendre en compte dans vue_opengl (glBindTexture(GL_TEXTURE_2D, ton_nom_texture)) en ayant activé la texture juste avant comme dans le tutoriel. Et n'oublie pas que les QOpenGLShaderProgram peuvent être des arguments de méthodes ainsi que les variables AttributeLocation et CoordonneeTextureId.
In reply to Philippe Guillaume Arsène Servant

Re: Texturing 3D objects

par Diego Polimeni,

Je te remercie pour la réponse.
En effet, j'ai trouvé une solution efficace qui utilise encore glDrawElements, l’idée étant d'activer un array de coordonnées texture, comme c’était déjà fait pour les vertex.