Bonjour,
Existe t-il une méthode pour générer automatiquement les coordonnées (u,v) d'une texture? càd, au lieu d'indiquer à chaque fois les texcoords, y a t-il une astuce pour plaquer la texture sans indiquer les coordonnées?
Bonjour,
Existe t-il une méthode pour générer automatiquement les coordonnées (u,v) d'une texture? càd, au lieu d'indiquer à chaque fois les texcoords, y a t-il une astuce pour plaquer la texture sans indiquer les coordonnées?
glTexGen est faite pour toi![]()
Merci Harooold, j'ai utilisé ce code :
Mais parfois j'ai un rendu bizare : j'ai de bonnes textures pour les faces d'avant et d'arrière alors que les faces gauche et droite ont une texture bizare. C'est quoi le problème?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // Texturing Contour Anchored To The Object gl.glTexGeni(GL.GL_S, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR); // Texturing Contour Anchored To The Object gl.glTexGeni(GL.GL_T, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR); gl.glEnable(GL.GL_TEXTURE_GEN_S); // Auto Texture Generation gl.glEnable(GL.GL_TEXTURE_GEN_T);
Ce n'est pas bizarre mais normal
OpenGL génere les coordonées grace à 4 plans ( un pour chaque coordonée ), que tu peux redéfinir et qui sont par défaut :
planex = { 1., 0., 0., 0. }
planey = { 0., 1., 0., 0. }
planez = { 0., 0., 1., 0. }
planew = { 0., 0., 0., 1. }
Tu prends un point, tu regardes la distance à planex, ça te donnes la coordonée de texture s de ce point, planey pour t, planez pour r et planew pour q.
Mais quand tu bosses avec des textures 2D tu ne vas génerer les coordonées que pour s et t, donc tu auras un plaquage 2D, du coup affichage correct sur avant et arriere et clamp de la texture sur les cotés.
Je ne pense pas qu'on puisse génerer automatiquement un plaquage de texture en 3D, ou alors il y a un truc qui m'a échappé avec glTexGen :p
T'as pas un exemple de code d'utilisation de glTexGen stp?
J'ai utilisé ce code mais maintenant uniquement les faces de droites et gauche ayant des bonnes textures, les autres non.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 gl.glTexGeni(GL.GL_S, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR); gl.glTexGenfv(GL.GL_S, GL.GL_OBJECT_PLANE, planex,0); gl.glTexGeni(GL.GL_T, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR); gl.glTexGenfv(GL.GL_T, GL.GL_OBJECT_PLANE, planey,0); gl.glTexGeni(GL.GL_R, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR); gl.glTexGenfv(GL.GL_R, GL.GL_OBJECT_PLANE, planez,0); gl.glEnable(GL.GL_TEXTURE_GEN_S); // Auto Texture Generation gl.glEnable(GL.GL_TEXTURE_GEN_T); gl.glEnable(GL.GL_TEXTURE_GEN_R);
J'ai pu appliquer glTexGen pour générer automatiquement des textures 2D.
Mais j'ai obtenu des textures inclinées ce qui donne un rendu pas réaliste.
Comment corriger ça?
Merci.
Et pourquoi ne pas le faire "à la main" au lieu de chercher quelque chose d'automatique qui ne te convient pas ?
C'est pas plus long de le faire "à la main", mais tout dépend de tes besoins de base bien entendu.
tu peux jouer avec la matrice de texture
à partir de là tu appliques rotation / translation comme pour un polygone
Code : Sélectionner tout - Visualiser dans une fenêtre à part glMatrixMode(GL_TEXTURE);
c'est plutot de la bidouille vu comme ça mais bon, ça rejoint visiblement ce que tu fais
pour quelque chose de propre, je rejoint Ti-R en te conseillant d'utiliser un outil adapté (modeleur)
Moi je veux utiliser des textures automatiques pour alleger et optimiser ma Base de Données. Si non, je crois qu'il faut faire un algorithme??????
tu peux effectivement appliquer un algorithme de génération automatique des coordonnées de textures à partir des sommets ou des normales ou les 2 mais glTexGen le fait normalement très bien, il faut que tu trouves les bons paramètres
je ne pense pas qu'à partir d'un algorithme tu puisses obtenir de meilleurs résultat mais je me trompe peut-etre
Voila le code que j'utilise pour générer automatiquement une texture:
J'obtient une texture impécable pour les quads mais une texture inclinée pour les triangles et les polygones.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 float ObjPlaneS[] = { 1.0f, 0.0f, 1.0f, 0.0f }; float ObjPlaneT[] = { 0.0f, 1.0f, 0.0f, 0.0f }; float ObjPlaneR[] = { 0.0f, 0.0f, 1.0f, 0.0f }; float ObjPlaneQ[] = { 0.0f, 0.0f, 0.0f, 1.0f }; gl.glEnable(GL.GL_TEXTURE_GEN_S); gl.glEnable(GL.GL_TEXTURE_GEN_T); gl.glEnable(GL.GL_TEXTURE_GEN_R); gl.glTexGeni( GL.GL_S, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR ); gl.glTexGeni( GL.GL_T, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR ); gl.glTexGeni( GL.GL_R, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR ); gl.glTexGenfv(GL.GL_S, GL.GL_OBJECT_PLANE, ObjPlaneS,0); gl.glTexGenfv(GL.GL_T, GL.GL_OBJECT_PLANE, ObjPlaneT,0); gl.glTexGenfv(GL.GL_R, GL.GL_OBJECT_PLANE, ObjPlaneR,0);
Il n'y aurait pas un problème avec ton plan pour les coordonnées S ?
j'ai aussi l'impression que tu te complique la vie, d'une part avec 3 coordonnées (S,T, et R) d'autre part avec des plans
Code : Sélectionner tout - Visualiser dans une fenêtre à part float ObjPlaneS[] = { 1.0f, 0.0f, 1.0f, 0.0f };
si tu regardes sur nehe une solution simple tiré du tuto 15 (Texture Mapped Outline Fonts) :
ou la même chose en sphérique adapté à partir du tuto 23 (Sphere Mapping Quadrics In OpenGL) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // Texturing Contour Anchored To The Object glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); // Texturing Contour Anchored To The Object glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); // Auto Texture Generation glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T);
edit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // Texturing Contour Anchored To The Object glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); // Texturing Contour Anchored To The Object glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); // Auto Texture Generation glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T);En gros, les coordonnées R et Q sont généralement ignorées.The R and Q coordinates are usually ignored. The Q coordinate can be used for advanced texture mapping extensions, and the R coordinate may become useful once 3D texture mapping has been added to OpenGL, but for now we will ignore the R & Q Coords. The S coordinate runs horizontally across the face of our polygon, the T coordinate runs vertically across the face of our polygon.
La coordonnée Q peut être utilisée pour de la génération avancée de coordonnées de texture et la coordonnée R ne devient utile qu'avec des textures en 3 dimensions.
La coordonnée S évolue sur l'axe horizontal des polygones de l'objet tandis que la coordonnée T évolue sur l'axe vertical (il ne faut pas oublier que, bien qu'évoluant dans un espace en 3 dimensions, les polygones restent des surfaces en 2 dimensions).
j'ai un autre problème, j'utilise la texture automatique pour une face de mon cube. Et je la désactive avec les instructions suivantes:
Mais les autres faces du cube seront influencé par cette textures. Par exemple, j'ai plaqué une texture de brique sur deux faces de mon cube, les autres faces auront la couleur rouge. Et si je plaque une texture de brique vert sur les deux faces concernées, les autres faces du cube auront la couleur verte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 gl.glDisable(GL.GL_TEXTURE_GEN_S); gl.glDisable(GL.GL_TEXTURE_GEN_T);
Qu'est ce que je fais sachant que j'ai bien désactivé la texture automatique aprés l'avoir plaqué sur mes deux faces concernées.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager