Partage
  • Partager sur Facebook
  • Partager sur Twitter

OpenGL

Sujet résolu
    24 mai 2019 à 18:56:10

    Bonjour, j'essaie d'afficher une texture avec OpenGL mais cela ne marche pas (je sais que le code pour les vertices marche, je poste donc celui pour la texture, mImage une image SFML) :

    if (glIsTexture(mIdTexture))
    		glDeleteTextures(1, &mIdTexture);
    	glGenTextures(1, &mIdTexture);
    	glBindTexture(GL_TEXTURE_2D, mIdTexture);
    		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, mImage->getSize().x, mImage->getSize().y, 0, GL_RGB, GL_UNSIGNED_BYTE, mImage->getPixelsPtr());
    		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    	glBindTexture(GL_TEXTURE_2D, mIdTexture);
    if (glIsBuffer(mVboTexture))
    		glDeleteBuffers(1, &mVboTexture);
    	glGenBuffers(1, &mVboTexture);
    
    	
    	glBindBuffer(GL_ARRAY_BUFFER, mVboTexture);
    
    		
    		glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(float), 0, GL_STATIC_DRAW);
    
    		glBufferSubData(GL_ARRAY_BUFFER, 0, 12 * sizeof(float), &mTextureBufferData[0]);
    
    	glBindBuffer(GL_ARRAY_BUFFER, 0);
    	glBindVertexArray(mVao);
    		glBindBuffer(GL_ARRAY_BUFFER, mVboTexture);
    			glEnableVertexAttribArray(1);
    			glVertexAttribPointer(
    				1,                  
    				2,                  
    				GL_FLOAT,           
    				GL_FALSE,           
    				0,                 
    				BUFFER_OFFSET(0)            
    			);
    		glBindBuffer(GL_ARRAY_BUFFER, 0);
    	glBindVertexArray(0);

    Dans la boucle d'affichage

    glUseProgram(mShader->getShaderID());
    	glBindVertexArray(mVao);
    	
    	glBindTexture(GL_TEXTURE_2D, mIdTexture);
    
    	
    	glDrawArrays(GL_TRIANGLES, 0, 6);
    
    	glBindTexture(GL_TEXTURE_2D, 0);
    
    	glBindVertexArray(0);
    	glUseProgram(0);

    Les shaders 

    #version 330 core
    
    layout(location = 0) in vec3 vertexPosition_modelspace;
    layout(location = 1) in vec2 intextCoord;
    
    
    out vec3 color;
    out vec2 textCoord;
    void main(){
    
    	gl_Position = vec4(vertexPosition_modelspace, 1.0);
    	color = vec3(1.0,0.5,0.25);
    	textCoord = intextCoord;
     }
    
    #version 330 core
    
    in vec3 color;
    in vec2 textCoord;
    
    out vec3 out_color;
    
    uniform sampler2D text;
    
    void main(){
        out_color = texture(text, textCoord).rgb;
    
    }

    Merci de votre aide par avance!




    -
    Edité par hertos 24 mai 2019 à 18:56:44

    • Partager sur Facebook
    • Partager sur Twitter
      25 mai 2019 à 16:40:24

      Pas sur qu'OpenGL apprécie que tu utilises GL_LINEAR_MIPMAP_LINEAR pour le min filter de ta texture alors que tu n'as pas généré ou chargé manuellement les mipmaps. Essaie voir en utilisant glGenerateMipmap.

      • Partager sur Facebook
      • Partager sur Twitter
        25 mai 2019 à 16:58:08

        Aaaaaaaah, ça marche nickel, merci beaucoup ! Pour ceux qui tomberaient sur ce post voici ce qu'il faut mettre : 
        if (glIsTexture(mIdTexture))
        		glDeleteTextures(1, &mIdTexture);
        	glGenTextures(1, &mIdTexture);
        	glBindTexture(GL_TEXTURE_2D, mIdTexture);
        		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, mImage->getSize().x, mImage->getSize().y, 0, GL_RGBA, GL_UNSIGNED_BYTE, mImage->getPixelsPtr());
        		
        		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
        		glGenerateMipmap(GL_TEXTURE_2D);
        	glBindTexture(GL_TEXTURE_2D, mIdTexture);
        Encore merci !
        • Partager sur Facebook
        • Partager sur Twitter

        OpenGL

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown