Directx render

niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010 - 17 janv. 2006 à 16:31
cali70 Messages postés 71 Date d'inscription mercredi 29 septembre 2004 Statut Membre Dernière intervention 19 mars 2008 - 19 janv. 2006 à 17:55
Salut a tous.
Voila j'ai fais deux fonctions qui affichent un triangle et une meshe.
quand j'affiche la meshe tout va bien,quand j'affiche le triangle ok aussi.
Mais quand j'affiche les deux en meme temps voila ce qui ce passe.


J'ai mis un timer a une demi seconde pour voir ce qui ce passe.


Le premier affichage tout est ok mais apres une demi seconde(le re affichage) le triangle prend la couleur de la meshe(mais garde sa texture).


J'ai du me loupé quelque part ,peut etre a la lumiere.
Merci de m'aider.

11 réponses

Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
17 janv. 2006 à 17:42
Bah oui, tu t'as loupé, mais où ? Sans code, on ne peut pas dire grand chose.

Passe le code executé entre BeginScene et EndScene.



"le triangle prend la couleur de la meshe(mais garde sa texture)."

Qu'est ce que ça veut dire ? Détaille le format de point utilisé.
0
niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010
17 janv. 2006 à 17:52
Salut.
Le code pour afficher un triangle et une meshe je l'ai pris du sdk dirext9.
la meshe c'est un arbre avec des feuilles vertes,apres 1/2seconde la texture du triangle vire au vert mais on vois toujour les motifs.
0
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
17 janv. 2006 à 20:18
Tu veux dire que la texture des feuilles remplace celle du triangle,
parce que je ne sais pas si tes feuilles sont vertes car texturées
vertes ou avec des points verts.



Admettons que la texture des feuilles remplace celle du triangle (dans
ce cas ta phrase est très embrouillante, le "MAIS garde la texture" du
moins).

Ca veut dire que tu n'indiques pas à DirectX d'utiliser la texture du triangle pour afficher le triangle.



Refais SetTexture(0, texturetriangle) juste avant d'afficher le
triangle et à chaque rendu, car la fonction de directX modifie la
texture du slot 0 pour mettre celle de la texture verte avant
l'affichage des feuilles.
0
niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010
18 janv. 2006 à 09:38
Salut.


Imagine le triangle affiche un ciel nuageux bleu apres 1/2sec on le voit toujour comme si eclairé avec une lumiere verte(comme les feuilles de la meshe).


Dans mon timer pour la mesh j'utilise une boucle comme dans le sdk:
g_pd3dDevice->SetMaterial( &g_pMeshMaterials[Id] );
g_pd3dDevice->SetTexture( 0, g_pMeshT[Id]);
g_pMesh->DrawSubset( j );

pour le triangle:
g_pd3dDevice->SetTexture( 0, g_pTexture);
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(Vertex) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
18 janv. 2006 à 12:36
Le code ne contient pas d'erreur mais il manque trop de lignes pour que je puisse trouver l'erreur.

Comment gère-tu l'éclairage ?

Eclaires-tu les feuilles avec une lumière verte que tu ne désactives pas pour afficher le triangle ?



Si on voit toujours les motifs du ciel sur le triangle, c'est que tu as
une lumière verte. Même si ton format de point contient une couleur,
elle n'a pas pu être modifiée d'un rendu à l'autre, de plus tu écrases
la texture verte de la feuille du slot 0?



Balance des screenshots et plus de code.
0
niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010
18 janv. 2006 à 13:28
Re salut.
Non j'eclaire avec une lumiere blanche.

Premier affichage: triangle puis meshe.

Puis 1/2 sec apres (le re affichage):triangle pluis meshe.
0
niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010
18 janv. 2006 à 13:31
,
0
niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010
18 janv. 2006 à 13:33
ce donne:
0
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
18 janv. 2006 à 20:39
J'ai l'impression que tu as essayé d'envoyé un truc qui n'est pas passé sur le forum (du moins que je ne vois pas).

Sinon, si tu n'as qu'une lumière blanche, je ne vois vraiment pas d'où peut venir le problème.

Passe le code executé entre BeginScene et EndScene, c'est desormais la seule solution pour t'aider. Ou mieux, upload un zip et donne le lien pour qu'on puisse compiler ton code pour le tester et le debugger.
0
cali70 Messages postés 71 Date d'inscription mercredi 29 septembre 2004 Statut Membre Dernière intervention 19 mars 2008
19 janv. 2006 à 17:15
ton probleme ca vient de ca : g_pd3dDevice->SetMaterial( &g_pMeshMaterials[Id] );

comme tu affiches le triangle en premier lors du premier rendu ca n'a pas d'incidence sur son rendu mais lros du 2ieme rendu et toujours programmé pour éffectuer le rendu avec le material de l'arbre qu'il applique également au triangle!
Pour regler le probleme tu dois affecter un nouveau material pour le triangle.

g_pd3dDevice->SetMaterial( &g_pMeshMaterials[Id] );
g_pd3dDevice->SetTexture( 0, g_pMeshT[Id]);
g_pMesh->DrawSubset( j );

pour le triangle:
g_pd3dDevice->SetMaterial( &triangleMaterial); // ici insère un nouveau material pour le triangle sinon il garde celui de l'arbre.
g_pd3dDevice->SetTexture( 0, g_pTexture);
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(Vertex) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );

Voilà je pense que ca devrait regler ton probleme, du moins je l'espere car c'est vrai sans complément de sources on peut difficilement t'aider...
@++
0
cali70 Messages postés 71 Date d'inscription mercredi 29 septembre 2004 Statut Membre Dernière intervention 19 mars 2008
19 janv. 2006 à 17:55
Je vais rajouter ici comment tu peux créer un material adéquat rapidement.

donc pour ton triangle si tu veux qu'il soit éclairé normalement... tu peux faire :



const D3DMATERIAL9 *mat;


ZeroMemory(&mat,
sizeof(mat));


(D3DXCOLOR&)mat->Diffuse = D3DXCOLOR(...... //la couleur ke tu veux; ici blanc serrait approprié dans ton cas je pense.... pour diffuse, ambient.....enfin tout
(D3DXCOLOR&)mat->Ambient = D3DXCOLOR(......


...........

J'espere que ca t'aidera un peu...
P.S: pas obligé d'utiliser un pointeur.... c comme tu le sents.
0
Rejoignez-nous