[D3D] Problème avec les matériaux

Problème avec les matériaux [D3D] - Programmation

Marsh Posté le 16-12-2001 à 11:39:43    

Je comprends pas pourquoi mes matériaux ne marche pas...
 
Voilà comment j'en initialise un:
 
D3DMATERIAL8 mtrl;
 ZeroMemory(&mtrl, sizeof(D3DMATERIAL8));
 mtrl.Ambient.r = 0.5;
 mtrl.Ambient.g = 0.1;
 mtrl.Ambient.b = 0.1;
 mtrl.Diffuse.r = 0.6;
 mtrl.Diffuse.g = 0.4;
 mtrl.Diffuse.b = 0.3;
 
Le problème, c'est que ce matériaux rend l'objet tout blanc, c'est pas normal je trouve, car aucune des couleurs n'est blanche...
 
Donc voilà, je pige pas trop... Si vous pouviez m'expliquer ce qui est faux.
 
Voilà ma lumière, juste pour voir si le problème ne vient pas de celle-ci.
 
 
D3D8LIGHT light;
ZeroMemory(&light, sizeof(D3DLIGHT8));
 light.Type = D3DLIGHT_POINT;
 light.Diffuse.r = 1;
 light.Diffuse.g = 1;
 light.Diffuse.b = 1;
 light.Ambient.r = 1;
 light.Ambient.g = 1;
 light.Ambient.b = 1;
 light.Range = 100;
 light.Position = D3DXVECTOR3(0, 0, -40);
 g_lpD3DDevice->SetLight(0, &light);
 g_lpD3DDevice->LightEnable(0, true);

Reply

Marsh Posté le 16-12-2001 à 11:39:43   

Reply

Marsh Posté le 16-12-2001 à 13:36:08    

J'ai fais quelques tests, ben en fait si pour un matériaux je mets une des couleurs à 0.2 ça fait la même chose que si je mets 1. C'est pour ça que tout apparait blanc vu que j'ai aucune couleur de nule...
 
Mais alors, comment faire pour ne pas juste pouvoir mettre le rouge, le vert ou le bleu à fond? Comment faire plusieurs teintes? Je pensais que c'était en jouant sur les valeurs comprises entre [0; 1].

Reply

Marsh Posté le 16-12-2001 à 15:36:28    

Essaie de mettre dvPower à 10.
 
EDIT : je te dis des conneries, le power c'est pour le specular.
As-tu activé le render state ?
SetRenderState( D3DRENDERSTATE_LIGHTING, TRUE );

 

[edtdd]--Message édité par z51--[/edtdd]

Reply

Marsh Posté le 16-12-2001 à 19:04:58    

J'ai bien sûr activer les lumières, sinon, c'est quoi dvPower? Je le trouve pas dans la structure D3DLIGHT8.

Reply

Marsh Posté le 17-12-2001 à 01:24:15    

ou est ton setMaterial ?
(je sais question debile.. mais bon on sait jamais)
 
de plus verifie les valeurs
des renderstates suivants:
DIFFUSEMATERIALSOURCE,  
SPECULARMATERIALSOURCE,  
AMBIENTMATERIALSOURCE  
etc..
S'ils ne sont pas a MATERIAL,
alors ils vont chercher la couleur ailleurs.
(au hasard dans la couleur par defaut de tes
vertices)
 
Encore un truc (j'abuse je sais)
c'est vraiment trop bizarre de mettre un light.ambient
a 1.0 partout..  
je verrais ambiant et diffuse avec la meme valeur
pour le materiel (tu peux meme les coder
par vertex grace au renderstate DIFFUSEMATERIALSOURCE et AMBIANTMATERIALSOURCE), et l'ambiant et le diffuse
de l'eclairage qui sont differents.
Sauf si bien entendu tu cherches des effets particuliers.
 
A+
LEGREG

Reply

Marsh Posté le 17-12-2001 à 07:14:45    

J'ai trouvé, en fait j'ai remplacé D3DCREATE_SOFTWARE_VERTEXPROCESSING par D3DCREATE_HARDWARE_VERTEXPROCESSING lors de la function CreateDevice(). Et alors les couleurs sont bonnes.
 
Par contre, je comprends pas trop pourquoi ça marche pas dans un cas, et d'ailleurs quelles sont les différences entres les deux flags?

Reply

Marsh Posté le 17-12-2001 à 10:24:59    

J'imagine que dans un cas, c'est par ta carte 3D que les vertices sont gérés, alors que dans l'autre cas, c une gestion "software"... c pour ça que je vois pas trop le lien avec ton pb !

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

Reply

Marsh Posté le 17-12-2001 à 10:39:52    

tu veux mon avis?
ca n'a rien avoir avec ce flag.
 
Le mettre sur "hardware" ca veut
juste dire que le transform and lighting
seront processe par la carte graphique
et donc que les donnees de vertex devront
etre places en memoire rapide pour le
processeur graphique mais lente
pour le processeur central.
Si tu es sur de ne pas avoir a utiliser
l'emulation software pour traiter tes
vertices (c'est a dire ne pas utiliser
les vertex shaders puisqu'ils ne sont pas supportes
par la GeForce256) et notamment
tu t'interdis de creer des vertex buffers
en system memory et d'utiliser ProcessVertices(),
alors tu verras peut-etre un gain de performance.
Si tu pense que tu vas utiliser alternativement
le hardware et le software, mets plutot le flag  
sur D3DCREATE_MIXED_VERTEXPROCESSING.
 
Donc a mon avis, ca n'a rien a voir avec ton probleme
(ou seulement indirectement)
as-tu verifie l'etat des renderstate?
as-tu essaye de changer la valeur de l'ambient
de ta lumiere?
 
LEGREG

Reply

Marsh Posté le 17-12-2001 à 19:09:33    

Bah voilà ce que ça donne: première image en software, deuxième en mixed (en hardware c'est pareil):
 
http://www.chez.com/s1zurcher/soft.jpg
 
http://www.chez.com/s1zurcher/mixed.jpg
 
C'est à n'y rien comprendre, on dirait qu'en software les couleurs des matériaux ne peuvent qu'être à leurs maximum ou leus minimums.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed