Bonjour a tous!

voila je n'y connais vraiment pas grand chose en Shader, j'ai rechercher des infos sur le web, et j'ai finalement pencher sur les GLSL.

Mon but est d'utiliser les shaders pour une application qui tourne avec QT et OSG, c'est une interface pour charger des model 3D et faire des modification.

- probleme certaine des faces ( issue du logiciel sketchup) sont inverser donc resorte noire dans le rendu GL. Je veu donc utiliser les shaders pour paré a ce problème.
Nom : avant.JPG
Affichages : 87
Taille : 14,7 Ko
pour le moment j'ai cree un .vert et un .frag qui me calcul un eclairage type phong dans le quel je ne tien pas compte du signe de la normal.

J'ai ajouter mon shaders dans ma scene.

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
//shader
        osg::StateSet* pstateInit = node->getOrCreateStateSet();
	osg::Program* m_pEclairageProgram;
	osg::Shader*  m_pEclairageVertObj;
	osg::Shader*  m_pEclairageFragObj;
	std::vector< osg::ref_ptr<osg::Program> > _programList;
 
	m_pEclairageProgram = new osg::Program();
	m_pEclairageProgram->setName( "eclairage" );
	m_pEclairageVertObj = new osg::Shader( osg::Shader::VERTEX );
	m_pEclairageFragObj = new osg::Shader( osg::Shader::FRAGMENT );
	_programList.push_back( m_pEclairageProgram );
 
	bool ok = loadShaderSource( m_pEclairageVertObj, QFileInfo(qApp->argv()[0]).dir().filePath("data/shaders/MyVertexShader.vert").latin1()) 
		 && loadShaderSource( m_pEclairageFragObj, QFileInfo(qApp->argv()[0]).dir().filePath("data/shaders/MyFragmentShader.frag").latin1()) ;
	if(ok)
	{
		m_pEclairageProgram->addShader( m_pEclairageFragObj );
		m_pEclairageProgram->addShader( m_pEclairageVertObj );
		pstateInit->setAttributeAndModes(m_pEclairageProgram, osg::StateAttribute::ON);    
	}
Ok cela fait bien ce que je veu au niveau des normals mais parcontre je pert mes materiau et texture. L'objet devient uni-color.

Nom : apres.JPG
Affichages : 74
Taille : 8,1 Ko

Avez vous une idée ? sachant que je charge mon shader sur la racine de mon objet, et que il recupere la couleur de ce noeud pour l'appliquer partout.

Faut il définir un shader au niveau de chaque feuille de mon model?