IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Appliquer une texture en utilisant les Vertex Array


Sujet :

OpenGL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Points : 31
    Points
    31
    Par défaut Appliquer une texture en utilisant les Vertex Array
    Bonjour à tous, je souhaite appliquer une texture sur chaque face d'un cube qui est composé de triangles (j'utilise GL_TRIANGLE_STRIP), en affichant le tout avec la technique des Vertex Array. Seulement voilà, le problème étant que les faces haute et basse sont mal texturées.

    Déclaration des tableaux:
    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
     
    private byte verts[] =
    {
    	-1, 1, -1,
    	-1, -1, -1,
    	-1, 1, 1,
    	-1, -1, 1,
    	1, 1, 1,
    	1, -1, 1,
    	1, 1, -1,
    	1, -1, -1
    };
     
    private byte texCoords[] =
    {
    	0,0, 1,0, 0,1, 1,1,   
    	0,0, 1,0, 0,1, 1,1,
    	0,0, 1,0, 0,1, 1,1,
    	0,0, 1,0, 0,1, 1,1,   
    	0,0, 1,0, 0,1, 1,1,
    	0,0, 1,0, 0,1, 1,1
    };
     
    private byte indices[] =
    {
    	0,1,2,3, // left
    	4,5,6,7, // right
    	3,1,5,7, // bottom
    	0,2,6,4, // top
    	6,7,0,1, // front face
    	2,3,4,5  // back
    };
    Dans le render:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 24, GL10.GL_UNSIGNED_BYTE, indicesBuf);
    C'est à priori un problème simple mais étant un débutant en OpenGL, j'avoue ne pas comprendre d'où vient le soucis.

    Merci par avance.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Salut

    Je crois qu'il ne faut pas mettre les virgules pour les coordonnés mais des points.
    Comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private byte texCoords[] =
    {
    	0.0, 1.0, 0.1, 1.1,   
    	0.0, 1.0, 0.1, 1.1,
    	0.0, 1.0, 0.1, 1.1,
    	0.0, 1.0, 0.1, 1.1,   
    	0.0, 1.0, 0.1, 1.1,
    	0.0, 1.0, 0.1, 1.1
    };
    Je débute aussi, donc j'espère ne pas d'avoir dis de bêtises.

  3. #3
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Citation Envoyé par Niicoo Voir le message
    Salut

    Je crois qu'il ne faut pas mettre les virgules pour les coordonnés mais des points.
    Comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private byte texCoords[] =
    {
    	0.0, 1.0, 0.1, 1.1,   
    	0.0, 1.0, 0.1, 1.1,
    	0.0, 1.0, 0.1, 1.1,
    	0.0, 1.0, 0.1, 1.1,   
    	0.0, 1.0, 0.1, 1.1,
    	0.0, 1.0, 0.1, 1.1
    };
    Je débute aussi, donc j'espère ne pas d'avoir dis de bêtises.
    Malheureusement si ... ... en fait, ici, il passe les entier 0 et 1 pour les coordonnées de texture)

    Par contre, il serait peut être effectivement mieux d'utiliser des flotant pour donner des valeurs entre 0 et 1
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Bonjour, pour étayer mes propos, voici un exemple encore plus simple mais qui pose également des problèmes, à savoir appliquer une texture sur une surface plate carré comme un sol par exemple.

    Le code qui suit fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // create vertices buffer
    byte[] verts = {-1,0,1,  1,0,1,  -1,0,-1,  1,0,-1};
     
    // create texture coordinates buffer
    byte[] tcs = {0,0,  1,0,  0,1,  1,1};
     
    ...
    gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
    Le code qui suit ne fonctionne pas (la texture ne s'affiche pas du tout):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // create vertices buffer
    byte[] verts = {-1,0,1,  1,0,1,  -1,0,-1,  1,0,-1};
     
    // create texture coordinates buffer
    byte[] tcs = {0,0,  1,0,  0,1,  1,1};
     
    byte[] indices = {0,1,2,3};
    ...
    gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 4, GL10.GL_BYTE, indicesBuf);
    Voilà, j'espère que vous pourrez m'aider.
    Merci par avance.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/05/2007, 19h36
  2. appliquer une texture sur une grille
    Par franc82 dans le forum OpenGL
    Réponses: 6
    Dernier message: 02/03/2007, 16h17
  3. recherche code pour limiter une lister et utiliser les bouton suivant precedent
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/09/2006, 17h43
  4. Réponses: 4
    Dernier message: 29/09/2006, 11h53
  5. Réponses: 5
    Dernier message: 18/09/2004, 21h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo