DirectX 10 : Charger et afficher un fichier .dae (Collada)

Résolu
seb2086 Messages postés 96 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 1 février 2010 - 12 août 2009 à 10:59
shorzy Messages postés 94 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 1 juin 2013 - 3 févr. 2010 à 12:24
Bonjour,

Comme le dit le titre j'utilise DirectX 10 et collada-dom.

Je voudrais charger et afficher un fichier collada dans mon application avec colla-dom mais je ne sais pas trop comment m'y prendre c'est pour ça que je viens vous demander.

Merci.

4 réponses

seb2086 Messages postés 96 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 1 février 2010
13 août 2009 à 23:25
Voilà je viens de réussir à charger et à afficher mon fichier collada dans Directx.
Mon objet est un cube. (C'est pour ça que j'ai mis des valeurs statiques, pour les tableaux de coordonnées par exemple).

Je précise que je ne charge que la géométrie de l'objet depuis le fichier *.dae

Voila le code :
        DAE *Objet_Collada = new DAE();
daeInt erreur;
 
// Triangle Vars
struct VertexPosColorStruct
{
    		D3DXVECTOR3 Pos;
D3DXVECTOR4 Color;
};
 
bool erreur_bool = false;
 
Objet_Collada->load("cubeM.dae");
 
domFloat_array* domFloat = 0 ;
erreur = Objet_Collada -> getDatabase() -> getElement((daeElement**)&domFloat, 0, NULL, COLLADA_TYPE_FLOAT_ARRAY);
if (erreur != DAE_OK)
erreur_bool = true;
 
domP* verticesCollada = 0 ;
erreur = Objet_Collada -> getDatabase() -> getElement((daeElement**)&verticesCollada, 0, NULL, COLLADA_TYPE_P);
if (erreur != DAE_OK)
erreur_bool = true;
 
int nbPositions  = domFloat -> getCount();
 
domListOfUInts listeVertices = verticesCollada -> getValue();
int nbVertices = listeVertices.getCount();
 
float xPos[8];
float yPos[8];
float zPos[8];
int pos = 0;
for(int i = 0; i < nbPositions/3; i++)
{
xPos[i] = domFloat -> getValue()[pos]*10;
yPos[i] = domFloat -> getValue()[pos+1]*10;
zPos[i] = domFloat -> getValue()[pos+2]*10;
pos += 3;
}
 
VertexPosColorStruct vertices[36];
int numVertex = 0;
for(int i = 0; i < nbVertices; i++)
{
numVertex = verticesCollada -> getValue()[i];
vertices[i].Pos = D3DXVECTOR3(xPos[numVertex], yPos[numVertex], zPos[numVertex]);
if(i < 6)
vertices[i].Color = D3DXVECTOR4(1.0f,0.0f,0.0f,0.0f);
else if(i < 12)
vertices[i].Color = D3DXVECTOR4(0.0f,1.0f,0.0f,0.0f);
else if(i < 18)
vertices[i].Color = D3DXVECTOR4(0.0f,0.0f,1.0f,0.0f);
else if(i < 24)
vertices[i].Color = D3DXVECTOR4(1.0f,0.5f,0.0f,0.0f);
else if(i < 30)
vertices[i].Color = D3DXVECTOR4(0.0f,1.0f,0.5f,0.0f);
else if(i >= 30)
vertices[i].Color = D3DXVECTOR4(0.5f,0.0f,1.0f,0.0f);
}


Si quelqu'un a des questions ou veut un zip du projet complet dites le moi.
3
shorzy Messages postés 94 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 1 juin 2013
31 janv. 2010 à 18:40
Salut.

N'ayant pas d'Exe, je ne peux pas jugé.
Mais en voyant que tu reponds à ton propre Post, je comprends que tu as dû bien travailler !!!

Je suis en train d'essayer de faire ça sous OpenGL
As tu utilisé des Bibliothèques ??
Quel site tu me conseils ??

Merci.

Peux tu m'envoyer le projet que j'Observé ça ?
Qu'as tu fais d'autre depuis ??

++
0
seb2086 Messages postés 96 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 1 février 2010
1 févr. 2010 à 13:30
Salut,

Ca fait un moment que je n'y ai pas touché mais comme librairie j'ai utilisé colladaDOM, voici le site et la tu a direcetement un exemple avec OpenGL, je me souviens avoir galerer un moment avant d'arriver a compiler un projet avec cette librairie et VS8 mais apres ca a l'air de bien fonctionner.

Je n'ai pas les sources avec moi je pourrais les recuperer a la fin de la semaine surement et je te le ferais passer.

Voila si tu a un probleme dit le je pourrai peut être t'aider.
0
shorzy Messages postés 94 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 1 juin 2013
3 févr. 2010 à 12:24
MERCI !!!!
0
Rejoignez-nous