Bonjour,
Je voudrais générer des textures puis les appliquer sur mes meshs.
J'ai commencé par faire un visitor
L'objectif est de plaquer une texture des 128*128 sur chaque face. (Pour le moment je n'ai que des textures noir).
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; };
Si vous pouviez me donner une ligne directrice.
EDIT : comment générer une texture ?
Bon se code compile mais il ne fonctionne pas (plantage au moment du rendu).
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);
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
Partager