Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1242 connectés 

  FORUM HardWare.fr
  Programmation

  [D3D] Problème avec les matériaux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[D3D] Problème avec les matériaux

n°81892
Alload
Posté le 16-12-2001 à 11:39:43  profilanswer
 

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);

mood
Publicité
Posté le 16-12-2001 à 11:39:43  profilanswer
 

n°81906
Alload
Posté le 16-12-2001 à 13:36:08  profilanswer
 

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].

n°81928
z51
Posté le 16-12-2001 à 15:36:28  profilanswer
 

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]

n°81975
Alload
Posté le 16-12-2001 à 19:04:58  profilanswer
 

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

n°82007
LeGreg
Posté le 17-12-2001 à 01:24:15  profilanswer
 

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

n°82010
Alload
Posté le 17-12-2001 à 07:14:45  profilanswer
 

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?

n°82035
El_gringo
Posté le 17-12-2001 à 10:24:59  profilanswer
 

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]

n°82037
LeGreg
Posté le 17-12-2001 à 10:39:52  profilanswer
 

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

n°82271
Alload
Posté le 17-12-2001 à 19:09:33  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [D3D] Problème avec les matériaux

 

Sujets relatifs
[PHP] re probleme PHP sessionprobleme de module
[C] Problème à deux francs avec sprintfProbleme de Logique Mathemathiques Y a des Matheux ici ?
Phorum 3.3 -> Problème SearchProblème avec phpmynews...
[javascript] probleme avec un cc dans un mailto[mysql++/VC++6.0/MFC] probleme de linkage !!! urgent !!!
Probleme addslashes, stripslashes ?[D3D] Problème avec les matériaux
Plus de sujets relatifs à : [D3D] Problème avec les matériaux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR