Salut,
J'aimerais savoir comment générer des coordonnées de textures automatiquement pour l'utilisation avec glTexCoordPointer(...).
Merci
Salut,
J'aimerais savoir comment générer des coordonnées de textures automatiquement pour l'utilisation avec glTexCoordPointer(...).
Merci
C'est vague, il faudrait savoir ce que tu souhaites texturer déjà. Par exemple sur Developpez il existe un article qui traite d'un algo pour texturer automatiquement un mesh issu d'une heightmap.
Bref, explique un peu plus le problème! ^^
Oui, biensur ^^
En fait, je génère un maillage pour une surface aquatique (pour simuler un ocean pour être précis), et là, faut projeter la texture de l'eau et la normal map depuis l'équation du plan x=0 y=1 z=0, sauf que j'arrive pas (ou plutot j'ai du mal à voir comment) attribuer les coordonnées de textures générées automatiquement (GL_TEXTURE_GEN_S/T/R/Q) au maillage.
voila ce que je fait à peu près:
Voila,
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glEnable(GL_TEXTURE_GEN_R); glEnable(GL_TEXTURE_GEN_Q); float plane[] = {0.0f, 1.0f, 0.0f, 0.0f}; glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); glTexGenfv(GL_S, GL_EYE_PLANE, plane); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); glTexGenfv(GL_T, GL_EYE_PLANE, plane); glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); glTexGenfv(GL_R, GL_EYE_PLANE, plane); glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); glTexGenfv(GL_Q, GL_EYE_PLANE, plane); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glVertexPointer(...); glNormalPointer(...); glEnable(GL_TEXTURE_2D); glTexturePointer(/*Là je bloque*/); glActiveTexture(GL_TEXTURE0_ARB); glBindTexture(GL_TEXTURE_2D, diffuseMapID); glEnable(GL_TEXTURE_2D); glTexturePointer(/*Là je bloque*/); glActiveTexture(GL_TEXTURE1_ARB); glBindTexture(GL_TEXTURE_2D, normalMapID); glDrawElements(...). glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); glDisable(GL_TEXTURE_GEN_R); glDisable(GL_TEXTURE_GEN_Q);
Merci =)
Alors là pour être honnête j'en ai vraiment aucune idée. Par contre, pourquoi passer par cette fonctions pour générer tes coordonnées de texture ? Il ne serait pas plus simple de les générer toi même ?
Un simple:
largeur: largeur de la surface
longueur: longueur de la surface
Imaginons que tu as largeur*longueur points.
Tu fais une "découpe" de ta texture, non ? Tu remplis ça dans un tableau que tu donnes à manger à OpenGL.
Apparament tu essayes de faire un rendu d'eau, si tu veux j'ai un lien interessant pour ça: http://blogs.wefrag.com/Xfennec/2006...er-pour-l-eau/
Merci pour ton article =)
Pour ce qui est de la génération des coordonnées de textures auto par découpe (comme pour les textures fonts) ce n'est pas trop mon objectif pour plusieurs raisons, la raison majeur est qu'une fois les coordonnées de textures générées, on peut plus les modifier de façon directe, et ça va pas trop m'aider pour animer mon eau par la suite ...
Ce que je cherche à faire c'est de projeter un texture sur le maillage de l'eau.
Merci quand même =)
Je reposte pour dire que mon problème est résolu =)
à soack:
Merci, ton idée m'a beaucoup aidé, au lieu de projeter ma texture, j'ai généré les coordonnées sur chaque vertex, et, là où je me trompais, cette technique est super paramétrable, vue qu'on peux gérer la répétition de la texture à la volée, il suffit juste de multiplier les coordonnées de texture par le nombre approprié =)
Encore une fois, merci soack.
Partager