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

 


Dernière réponse
Sujet : [D3D] Problème avec les matériaux
youdontcare edit : je n'ai rien dit ...

 

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


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
youdontcare edit : je n'ai rien dit ...

 

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

Alload void CScene::LoadMaterials()
{
 ifstream file(szFilePath);
 
 bool finished = false;
 string buffer;
 unsigned short nCurrent;
 
 while (!finished)
 {
  file >> buffer;
 
  if (buffer == "*MATERIAL_COUNT" )
  {
   file >> nMaterials;
   pMaterials = new SMaterial[nMaterials];
   pD3DMaterials = new D3DMATERIAL8[nMaterials];
  }
 
  if (buffer == "*MATERIAL" )
  {
   file >> nCurrent;
   pMaterials[nCurrent].istextured = false;
   ZeroMemory(&pD3DMaterials[nCurrent], sizeof(D3DMATERIAL8));
  }
 
  if (buffer == "*MATERIAL_AMBIENT" )
  {
   file >> pD3DMaterials[nCurrent].Ambient.r;
   file >> pD3DMaterials[nCurrent].Ambient.g;
   file >> pD3DMaterials[nCurrent].Ambient.b;
   pD3DMaterials[nCurrent].Ambient.a = 1;
  }
 
  if (buffer == "*MATERIAL_DIFFUSE" )
  {
   float r, g, b;
   file >> r;
   file >> g;
   file >> b;
   pMaterials[nCurrent].diffuse[0] = (unsigned short)(r * 255);
   pMaterials[nCurrent].diffuse[1] = (unsigned short)(g * 255);
   pMaterials[nCurrent].diffuse[2] = (unsigned short)(b * 255);
 
   pD3DMaterials[nCurrent].Diffuse.r = r;
   pD3DMaterials[nCurrent].Diffuse.g = g;
   pD3DMaterials[nCurrent].Diffuse.b = b;
   pD3DMaterials[nCurrent].Diffuse.a = 1;
  }
 
  if (buffer == "*MATERIAL_SPECULAR" )
  {
   float r, g, b;
   file >> r;
   file >> g;
   file >> b;
   pMaterials[nCurrent].specular[0] = (unsigned short)(r * 255);
   pMaterials[nCurrent].specular[1] = (unsigned short)(g * 255);
   pMaterials[nCurrent].specular[2] = (unsigned short)(b * 255);
 
   pD3DMaterials[nCurrent].Specular.r = r;
   pD3DMaterials[nCurrent].Specular.g = g;
   pD3DMaterials[nCurrent].Specular.b = b;
   pD3DMaterials[nCurrent].Specular.a = 1;
  }
 
  if (buffer == "*GEOMOBJECT" )
  {
   finished = true;
  }
 }
 
 file.close();
}
youdontcare

Alload a écrit a écrit :

g_lpD3DDevice->SetMaterial(&pD3DMaterials[pObjects[i].nMatRef]);


tu n'as pas mis un pointeur de pointeur ?
 
reregarde le code de création des matériaux, mets-le ici, ...

Alload Ben oui quand même.
:)
 
Nan en fait, si je crée un matériaux à la main dans ma fonction de rendu ça marche. Mais si je met le matériaux qui est dans ma class alors les objets restent blanc...
 
Je comprend pas trop...
:(
youdontcare ... as-tu créé une lumière ? :D
Alload Mon FVF: D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_SPECULAR
 
Et pour mes matériaux, j'ai un tableau de D3DMATERIAL8 dans lequelle je met les couleurs ambientes, diffuses et speculaires.
youdontcare le lighting est on ?
 
tes objets ont-ils bien des normales ?
 
spécifies-tu le bon vertex format ?  
 
tu mets quoi dans ta structure de matériau ?
Alload D'où vient l'erreur d'après vous?
Alload J'ai une class dans laquelle se trouve les matériaux de la scène et une fonction pour afficher la scène, le problème c'est quand je passe les matériaux les objects restent blancs alors qu'en faisant des tests sur les données des matériaux, celles-ci sont bonnes.
 
Voilà le bout de code:
 
dans la class:
D3DMATERIAL8* pD3DMaterials;
 
 
 
la fonction de la class:
void CScene::RenderScene()
{
 for (unsigned short i = 0; i < nObjects; i++)
 {
  g_lpD3DDevice->SetStreamSource(0, pVBuffer[i], sizeof(SVertex));
 
  g_lpD3DDevice->SetMaterial(&pD3DMaterials[pObjects[i].nMatRef]);
 
  g_lpD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, pObjects[i].nFaces);
 }
}

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