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

OpenSceneGraph Discussion :

[OpenSceneGraph] Problème affichage de texture


Sujet :

OpenSceneGraph

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut [OpenSceneGraph] Problème affichage de texture
    Dans le code qui suit, je ne parvient pas à afficher l'image sur les cubes (afin que cette dernière devienne sa texture).

    J'ai suivi ce que m'ont dit divers tutoriaux, mais cela ne marche pas. Pourriez-vous m'aider.

    Merci.

    PS : les images se chargent, mais ne s'affichent pas.

    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
    static osg::Geode* CreateCube(float fRadius,osg::Vec3 vPosition)
    	{
    		//déclaration d'une géométrie : un cube
    		osg::Geometry* cube = new osg::Geometry();
    		//déclaration d'un noeud géométrique
    		osg::Geode* geodeCube = new osg::Geode();
    		//ajout du cube dans le noeud
    		geodeCube->addDrawable(cube);
    		geodeCube->addDrawable(cube);
     
    		//déclaration des points composant le carré
    		osg::Vec3Array* cubeVertices= new osg::Vec3Array;
    		cubeVertices->push_back( osg::Vec3( vPosition.x()-fRadius/2, vPosition.y(), vPosition.z()+fRadius/2) ); // front left
    		cubeVertices->push_back( osg::Vec3( vPosition.x()+fRadius/2, vPosition.y(), vPosition.z()+fRadius/2) ); // front right
    		cubeVertices->push_back( osg::Vec3( vPosition.x()+fRadius/2, vPosition.y(), vPosition.z()-fRadius/2) ); // back right
    		cubeVertices->push_back( osg::Vec3( vPosition.x()-fRadius/2, vPosition.y(), vPosition.z()-fRadius/2) ); // back left
     
    		//association des points composant le carré et le carré
    		cube->setVertexArray( cubeVertices );
     
     
     
    		osg::DrawElementsUInt* cubeBase = new osg::DrawElementsUInt(osg::PrimitiveSet::QUADS, 0);
    		cubeBase->push_back(3);
    		cubeBase->push_back(2);
    		cubeBase->push_back(1);
    		cubeBase->push_back(0);
     
    		//ajout au cube de ces nouvelles caractéristiques
    		cube->addPrimitiveSet(cubeBase);
    		osg::Vec3Array* texcoords = new osg::Vec3Array(4); 
    		(*texcoords)[0].set(vPosition.x()-fRadius/2, vPosition.y(), vPosition.z()+fRadius/2 ); // front left
    		(*texcoords)[1].set(vPosition.x()+fRadius/2, vPosition.y(), vPosition.z()+fRadius/2 ); // front right
    		(*texcoords)[2].set(vPosition.x()+fRadius/2, vPosition.y(), vPosition.z()-fRadius/2 ); // back right
    		(*texcoords)[3].set(vPosition.x()-fRadius/2, vPosition.y(), vPosition.z()-fRadius/2 ); // back left
     
    		cube->setTexCoordArray(0,texcoords); 
     
    		osg::ref_ptr<osg::Texture2D>faceTexture->setImage(osgDB::readImageFile("rss.gif"));
    		std::cout<<faceTexture->getImage()->getFileName()<<std::endl;
     
    		osg::ref_ptr<osg::StateSet> stateOne (new osg::StateSet());
     
    		// Assign texture unit 0 of our new StateSet to the texture 
    	    // we just created and enable the texture.
    		stateOne->setTextureAttributeAndModes(3,faceTexture.get(),osg::StateAttribute::ON);
    		// Associate this state set with the Geode that contains
    	    // the pyramid: 
    		//cube->setStateSet(stateOne);
    		geodeCube->setStateSet(stateOne.get());
    		//geodeCube->setStateSet(stateOne);
    		return(geodeCube);
    	}
     
     
    //puis dans le main :
     
    osg::ref_ptr<osg::Geode> model = Cube::CreateCube(0.9f,tabCube[i]);
    			// on ajoute le node du modele
    model_position->addChild(model.get());
    root->addChild(model_position.get());

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    Bien le bonjour,

    Open Scene Graph est complexe, mais je vais tenter de rassembler mes souvenirs.
    Le stateset a l'air bon, la texture est bien chargée, ton problème n'a pas l'air de venir d'elle.
    La construction de ton cube avec les vertices et les coordonnées de texture me semble obscure (4 vertices ?).
    A part la texture, ton cube s'affiche-t-il correctement ?

    Peut-être qu'en utilisant directement osg::Box ça serait plus simple.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut
    Citation Envoyé par khayyam90
    Bien le bonjour,

    Open Scene Graph est complexe, mais je vais tenter de rassembler mes souvenirs.
    Le stateset a l'air bon, la texture est bien chargée, ton problème n'a pas l'air de venir d'elle.
    La construction de ton cube avec les vertices et les coordonnées de texture me semble obscure (4 vertices ?).
    A part la texture, ton cube s'affiche-t-il correctement ?

    Peut-être qu'en utilisant directement osg::Box ça serait plus simple.
    Le problème est que je veux passer d'un cube texturé à un carré texture (d'où le nom de la classe, qui va changer d'ici peu).
    C'est pour ca que 4 vertices suffisent.

    Le carré s'affiche correctement, mais sans texture (ou avec des traits blanc, après quelques modifications).

    Modif : le carré affiche une texture composée à moitié de rouge et de noir. Je ne parviens pas à savoir d'où viennent ces couleurs.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut
    J'ai enfin trouvé la solution, les coordonnées de textures étaient mauvaise, j'ai voulu me compliquer la vie, alors que cela ne sert à rien.

    voici la modification à apporter au programme pour que ceci fonctionne :
    osg::Vec2Array* coordonneesTexture = new osg::Vec2Array(4);
    (*coordonneesTexture)[0].set(0.0f, 0.0f ); // front left
    (*coordonneesTexture)[1].set(1.0f, 0.0f); // front right
    (*coordonneesTexture)[2].set(1.0f, 1.0f ); // back right
    (*coordonneesTexture)[3].set(0.0f, 1.0f ); // back left


    C'était très simple, mais avec OSG....

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

Discussions similaires

  1. [Débutant][OpenGL ES] Problème affichage textures
    Par Niicoo dans le forum OpenGL
    Réponses: 2
    Dernier message: 12/06/2009, 15h15
  2. Réponses: 10
    Dernier message: 08/06/2009, 11h30
  3. [VBO] Problème d'affichage de texture
    Par Lung dans le forum OpenGL
    Réponses: 2
    Dernier message: 22/04/2009, 08h16
  4. Problème affichage de texture.
    Par laflak dans le forum OpenGL
    Réponses: 6
    Dernier message: 29/12/2008, 12h16
  5. OpenSceneGraph: problème de blending de texture
    Par cheveche4 dans le forum OpenSceneGraph
    Réponses: 4
    Dernier message: 08/04/2008, 19h14

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