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 :

Problème multitexturing automatique [OpenGL 4.x]


Sujet :

OpenGL

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 22
    Par défaut Problème multitexturing automatique
    Bonjour j'aimerais pouvoir texturé un objet avec plusieurs textures(ambiant, diffuse...). Le soucis est que cela ne fonctionne pas.
    Voici le code opengl :
    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
     
    void Material::activeTextures()
    {
    	unsigned int i = 0, j = 0;
    	//active and bind textures
    	for (i = 0; i < textures_ambiant.size(); i++)
    	{
    		glActiveTexture(GL_TEXTURE0 + i);
    		this->textures_ambiant[i]->bind();
    		glUniform1i(glGetUniformLocation(programID, ("samplerAmbiantTexture" + std::to_string(i)).c_str()), i);
    		j++;
    	}
    	for (i = 0; i < textures_diffuse.size(); i++)
    	{
    		glActiveTexture(GL_TEXTURE0 + i + j);
    		this->textures_diffuse[i]->bind();
    		//std::cout << ("samplerDiffuseTexture" + std::to_string(i)).c_str() << std::endl;
    		glUniform1i(glGetUniformLocation(programID, ("samplerDiffuseTexture" + std::to_string(i)).c_str()), i + j);
    		j++;
    	}
    	for (i = 0; i < this->textures_specular.size(); i++)
    	{
    		glActiveTexture(GL_TEXTURE0 + i + j);
    		this->textures_specular[i]->bind();
    		glUniform1i(glGetUniformLocation(programID, ("samplerSpecularTexture" + std::to_string(i)).c_str()), i + j);
    	}
    }
    et le render :
    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
     
    void DefaultMaterial::render(Model *model)
    {
     
    	//UNIFORMS
    	//this->M *= glm::rotate(0.005f, glm::vec3(0, 1, 0));
    	this->Normal_Matrix = glm::transpose(glm::inverse(this->M));
    	//set the uniform variable MVP
    	glUniformMatrix4fv(this->MID, 1, GL_FALSE, &M[0][0]);
    	glUniformMatrix4fv(this->NMID, 1, GL_FALSE, &Normal_Matrix[0][0]);
    	glUniform1fv(this->compl.ambiantID, 1, &(compl.ambiant));
    	glUniform1fv(this->compl.diffuseID, 1, &(compl.diffuse));
    	glUniform1fv(this->compl.specularID, 1, &(compl.specular));
     
    	//OPTIONS
    	//Enable culling triangles which normal is not towards the camera
    	glEnable(GL_CULL_FACE);
    	// Enable depth test
    	glEnable(GL_DEPTH_TEST);
     
    	//TEXTURES
    	this->activeTextures();
     
    	//BUFFERS
    	for (int i = 0; i < 4; i++)
    	{
    		//bind UBO buffer light
    		glBindBufferBase(GL_UNIFORM_BUFFER, i, this->scene->getCollector()->getLightUBO(i)->getID());
    		//bind UBO lighting with program shader
    		glUniformBlockBinding(this->programID, this->block_index_lights[i], i);
    	}
     
    	//bind UBO buffer camera
    	glBindBufferBase(GL_UNIFORM_BUFFER, 4, this->scene->getCamUBO()->getID());
    	//bind UBO camera with program shader
    	glUniformBlockBinding(this->programID, this->block_index_camera, 4);
     
    	//RENDER
    	//render model
    	model->render();
     
    	//RELEASE
    	this->releaseTextures();
    	//glBindBufferBase(GL_UNIFORM_BUFFER, 0, 0);
     
    }
    et dans le fragment shader:
    j'utilise cette variable: juste une texture "uniform sampler2D samplerDiffuseTexture0;"
    Sauf que le résultat est noir, et du coup ne fonctionne pas.

    Quelqu'un aurait t il une idée?
    Je vous remercie d'avance

  2. #2
    Expert confirmé

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

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Salut!

    As-tu vérifié ce que glGetUniformLocation te renvoie?

    EDIT:

    De plus, j'aimerais bien voir le code de tes shaders (fragment et vertex)
    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).

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

Discussions similaires

  1. [word 2003] problème insertion automatique
    Par irons dans le forum Word
    Réponses: 7
    Dernier message: 27/08/2008, 12h01
  2. [AJAX] Refresh automatique
    Par LN69 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 23/05/2008, 11h13
  3. problème : lancement automatique de mon site flash
    Par thibault87 dans le forum Flash
    Réponses: 1
    Dernier message: 13/05/2008, 12h52
  4. [VBA-E] Problème Filtre automatique
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/05/2007, 14h58
  5. Problème : ouvrir automatiquement .xls en vba
    Par alexxx69 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/11/2005, 15h49

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