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 :

openGL3.3: probleme de texture


Sujet :

OpenGL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut openGL3.3: probleme de texture
    bonjour,

    je suis entrain de développez un application C++ avec openGL3.3, SFML2(pour la fenêtrage) et openCTM pour charger les model3D.

    je n'arrive pas a faire marcher les texture: lors du rendu le model est tout noir.

    je suis sous ubuntu 64bit. vous pourrez trouvez le code entier ici.

    voici le code qui charge les model:

    VBO.h:
    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
    #ifndef VBO_H
    #define VBO_H
     
    #include "tools.h"
    #include "texture.h"
     
    class VBO
    {
    	public:
    		VBO(string file);
    		~VBO();
     
    		void draw();
     
    	private:
    		unsigned int m_vaoID;		// one vertex array objects, one for each drawn object
    		unsigned int m_vboID[2];
    		unsigned int m_vboColorID;
    		unsigned int m_vbotexCoordID;
    		Texture* tex;
    		bool Color;
    		unsigned int numTriangles;
     
    };
     
    #endif
    VBO.cpp:
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    #include "vbo.h"
     
    #define GL3_PROTOTYPES 1
    #include <GL3/gl3.h>
    #include <openctm.h>
    #include <iostream>
     
    VBO::VBO(string file):
    tex(NULL),
    Color(true)
    {
    	CTMimporter ctm;
     
    	try
    	{	
    		ctm.Load(file.c_str());
        }
        catch (const ctm_error& error)
        {
    		string msg=string("impposible de charger le fichier: ")+file;
    		throw msg;
    	}
     
    	if(ctm.GetNamedAttribMap("Color") == CTM_NONE)
    		Color=false;
     
     
    	// one VAOs allocation
    	glGenVertexArrays(1, &m_vaoID);
     
    	// VAO setup
    	glBindVertexArray(m_vaoID);
     
    	glGenBuffers(2, m_vboID);
     
    	glEnableVertexAttribArray(0);
    	glBindBuffer(GL_ARRAY_BUFFER, m_vboID[0]);
    	glBufferData(GL_ARRAY_BUFFER, ctm.GetInteger(CTM_VERTEX_COUNT)*3*sizeof(GLfloat), ctm.GetFloatArray(CTM_VERTICES), GL_STATIC_DRAW);
    	glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0); 
     
    	if(Color)
    	{
    		glEnableVertexAttribArray(1);
    		glGenBuffers(1, &m_vboColorID);
    		glBindBuffer(GL_ARRAY_BUFFER, m_vboID[2]);
    		glBufferData(GL_ARRAY_BUFFER, ctm.GetInteger(CTM_VERTEX_COUNT)*4*sizeof(GLfloat), ctm.GetFloatArray(ctm.GetNamedAttribMap("Color")), GL_STATIC_DRAW);
    		glVertexAttribPointer((GLuint)1, 4, GL_FLOAT, GL_FALSE, 0, 0);
    	}
     
    	//texture
    	if(ctm.GetInteger(CTM_UV_MAP_COUNT) > 0)
    	{
    		tex = new Texture((string)ctm.GetUVMapString(CTM_UV_MAP_1, CTM_FILE_NAME));
    		glGenBuffers(1, &m_vbotexCoordID);
     
    		glEnableVertexAttribArray(2);
     
    		glBindBuffer(GL_ARRAY_BUFFER, m_vbotexCoordID);
    		glBufferData(GL_ARRAY_BUFFER, ctm.GetInteger(CTM_VERTEX_COUNT)*2*sizeof(GLfloat),ctm.GetFloatArray(CTM_UV_MAP_1), GL_STATIC_DRAW);
    		glVertexAttribPointer((GLuint)2, 2, GL_FLOAT, GL_FALSE, 0, 0);
    	}
     
    	numTriangles=ctm.GetInteger(CTM_TRIANGLE_COUNT);
    	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_vboID[1]);
    	glBufferData(GL_ELEMENT_ARRAY_BUFFER, ctm.GetInteger(CTM_TRIANGLE_COUNT)*3*sizeof(uint), ctm.GetIntegerArray(CTM_INDICES), GL_STATIC_DRAW);
    	glVertexAttribPointer((GLuint)3, 1, GL_UNSIGNED_INT, GL_FALSE, 0, 0);
     
    	glBindVertexArray(0);
    }
     
     
    VBO::~VBO()
    {
    	glBindBuffer(GL_ARRAY_BUFFER, 0);
    	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
    	glDeleteBuffers(2, m_vboID);
    	glDeleteBuffers(1, &m_vboColorID);
    	glBindVertexArray(0);
    	glDeleteVertexArrays(1, &m_vaoID);
    	if(tex)
    		delete tex;
    }
     
    void VBO::draw()
    {
    	if(!Color)
    		glVertexAttrib3f((GLuint)1, 1.0, 1.0, 1.0);
    	glBindVertexArray(m_vaoID);
    	if(tex)
    		tex->bind();
    	glDrawElements(GL_TRIANGLES, numTriangles*3, GL_UNSIGNED_INT, 0); 
    	glBindVertexArray(0);
    }
    je suis désoler de mettre autant de code mais je n'est aucune idée d'où je me suis trompez

    merci d'avance

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 879
    Points : 219 236
    Points
    219 236
    Billets dans le blog
    122
    Par défaut
    Bonjour,

    J'ai l'impression (bon d'accord, j'ai fait juste un rapide parcourt du code) que vous n'activez pas le tableau de coordonées de texture ... ou que vous n'activez pas le texturing.
    Sinon cela peut être aussi dans le shader ...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 477
    Points
    11 477
    Billets dans le blog
    11
    Par défaut
    Tu dis utiliser OpenGL 3.3, avec un contexte compatible 2.X ou pas ?
    Si tu utilises un contexte compatible, il faut activer ta texture, sinon, il faut la passer au shader via une variable uniform. Tu peux nous montrer le code correspondant ?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    merci pour vaut réponse.

    pour répondre a vaut question, il y a bien un tableau de coordonné de texture. et dans openGL 3.3 "glEnable(GL_TEXTURE_2D);" ne sert a rien, car tout marche avec les shader. vous pouvez toujours regarder si vous avez envi ici:
    http://fardokin.alwaysdata.net/SMFL2-OGL33.zip

    je vait modifier mon code pour utiliser freeGLUT j'ai trouver un tutorial qui explique openGL3.3 avec freeglut et qui explique les texture car j'ai mal comprendre un truc.

    merci pour vaut réponse mais je vais recommencez de zéro car je n'est aucun idée d'où le problème vient.

  5. #5
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 477
    Points
    11 477
    Billets dans le blog
    11
    Par défaut
    Et donc, tu passes ta texture au shader ou pas ? On peut voir le code, ainsi que le code de traitement de la texture (et de l'UV) dans le shader ?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    voici le code du shader:
    frag:
    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
    #version 330
     
     
    in vec4 color;
    in  vec2 texCoord;
    out vec4 gl_FragColor;
     
     
    uniform sampler2D gSampler;
     
     
    void main()
    {
        gl_FragColor = texture2D(gSampler, texCoord.xy);
    }
    vert:
    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
    #version 330
     
    out vec4 color;
    out vec2 texCoord;
     
    uniform mat4 modelview;
    uniform mat4 projection;
     
    #define ATTR_POSITION  0
    #define ATTR_COLOR 1
    #define ATTR_TEXCOORD0 2
     
    layout(location = ATTR_TEXCOORD0) in vec2 texCoordI;
    layout(location = ATTR_COLOR)  in vec4 colorI;
    layout(location = ATTR_POSITION)  in vec4 positionI;
     
    void main()
    {
        gl_Position = projection * modelview * positionI;
        color = colorI;
        texCoord=texCoordI;
    }

  7. #7
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 477
    Points
    11 477
    Billets dans le blog
    11
    Par défaut
    Tu la passes comment, au shader, ta texture ?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    j'ai enfin trouver le problème j'avais mal implémenter ma class "texture". j'avais inverser le contenu des mes fonction par une erreur d'inattention. merci de votre aide surtout sur erreur aussi stupide et le temp que j'ai mis a la resoudre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit probleme de texture
    Par patatose dans le forum OpenGL
    Réponses: 2
    Dernier message: 15/08/2006, 15h26
  2. Problème de Texture !
    Par darkein dans le forum 2D
    Réponses: 5
    Dernier message: 21/01/2006, 23h42
  3. Probleme de texture et depth test..
    Par bibije dans le forum OpenGL
    Réponses: 6
    Dernier message: 29/12/2005, 13h34
  4. Probleme de texture
    Par Dmnbp7ip dans le forum DirectX
    Réponses: 1
    Dernier message: 13/05/2005, 12h51
  5. probleme de texture sur une sphère
    Par sebpp dans le forum OpenGL
    Réponses: 2
    Dernier message: 12/04/2005, 19h46

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