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 :

Génération de texture


Sujet :

OpenSceneGraph

  1. #1
    Membre habitué Avatar de robinsondesbois
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2012
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Loire (Auvergne)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 171
    Points : 173
    Points
    173
    Par défaut Génération de texture
    Bonjour,

    Je voudrais générer des textures puis les appliquer sur mes meshs.
    J'ai commencé par faire un visitor

    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
    #pragma once
     
    #include <osg/NodeVisitor>
     
    class TextureVisitor : public osg::NodeVisitor
    {
    public:
        TextureVisitor(bool visibilite_userdata = true, bool est_gizmo = false) : _level(0)
    	{  setTraversalMode(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN);}
     
        std::string spaces()
        { return std::string(_level*2, ' '); }
     
        virtual void apply( osg::Node& node )
    	{
    		std::cout << spaces() << static_cast<UserData*>(node.getUserData())->getId() << "::"  
    			<< node.className() << std::endl;
     
    		_level++;
     
     
    		traverse( node );
    		_level--;
    	}
     
        virtual void apply( osg::Geode& geode )
    	{
    		std::cout << spaces() << static_cast<UserData*>(geode.getUserData())->getId() << "::"  
    		  << geode.className() << std::endl;
     
    		_level++;
     
    		int nbDrawable = geode.getNumDrawables();
    		for ( unsigned int i=0; i<nbDrawable; ++i )
    		{
    			ref_ptr<Drawable> drawable = geode.getDrawable(i);
    			if (drawable->asGeometry())
    			{
    				//affichage
    				std::cout << spaces() << static_cast<UserData*>(drawable->getUserData())->getId() << "::" << drawable->className() << std::endl;
    			}
    		}
     
    		traverse( geode );
    		_level--;
    	}
    protected:
        unsigned int _level;
    };
    L'objectif est de plaquer une texture des 128*128 sur chaque face. (Pour le moment je n'ai que des textures noir).

    Si vous pouviez me donner une ligne directrice.

    EDIT : comment générer une texture ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Texture2D *genTex = new Texture2D;
    genTex->setDataVariance(Object::DYNAMIC);
    Image *tex = new Image;
    tex->setImage(128, 128*nbFace, 0, 1, GL_BYTE, GL_UNSIGNED_BYTE, texture, Image::NO_DELETE);
    genTex->setImage(tex);
    StateSet *state = new StateSet;
    state->setTextureAttributeAndModes(0, genTex, StateAttribute::ON);
    geode.setStateSet(state);
    Bon se code compile mais il ne fonctionne pas (plantage au moment du rendu).
    Je pense que ça viens de la ligne de la création de l'image. (mais il n'y a rien dans la doc )


    Robin

  2. #2
    Membre habitué Avatar de robinsondesbois
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2012
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Loire (Auvergne)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 171
    Points : 173
    Points
    173
    Par défaut
    Bon bin en fait j'ai trouvé.

    La fonction setImage prend pour paramètre : (s, t, r, internalTextureFormat, pixelFormat, type, data, mode).

    Alors c'est : s comme swidth, t comme theight et r comme rien.

    tex->setImage(128*nbFace, 128, 0, GL_RGB, GL_RGB, GL_UNSIGNED_BYTE, texture, Image::USE_NEW_DELETE);

    Voila ce message servira peut-être à quelqu'un

  3. #3
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Citation Envoyé par robinsondesbois Voir le message
    tex->setImage(128*nbFace, 128, 0, GL_RGB, GL_RGB, GL_UNSIGNED_BYTE, texture, Image::USE_NEW_DELETE);
    Je précise que le USE_NEW_DELETE est a utiliser uniquement si le buffer (ici "texture") a été alloué avec un new.

    (et de meme utiliser un autre flag avec malloc)

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

Discussions similaires

  1. Génération automatique des coordonnées de textures.
    Par F-fisher dans le forum OpenGL
    Réponses: 5
    Dernier message: 27/12/2009, 12h46
  2. Réponses: 1
    Dernier message: 11/03/2009, 19h22
  3. DirectX RenderMonkey génération texture
    Par Moth13 dans le forum API graphiques
    Réponses: 4
    Dernier message: 20/12/2007, 09h17
  4. Algorithme de génération de textures.
    Par Disciple195 dans le forum SDL
    Réponses: 2
    Dernier message: 18/06/2007, 21h16

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