Normales d'une map 3d.

BumpMANN Messages postés 330 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 26 janvier 2009 - 13 mars 2004 à 21:23
BumpMANN Messages postés 330 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 26 janvier 2009 - 13 mars 2004 à 21:44
Je suis pas optimiste sur les réponses :clown) mais je la pose quand même! donc voila: j'essaie de faire une map, en 3d, avec directx. Les points et triangles sont bien positionés, ce n'est pas le probleme. le truc c'est pour les lumieres: il faut les normales. donc je m'y suis mis, mais la je sais vraiment pas pourquoi sa marche pas :sad) . Voila le passage :

GROUNDVERTEX* pVertices;
if( FAILED( m_pVB->Lock( 0, 0, (void**)&pVertices, 0 ) ) )
return E_FAIL;

for(j=0; j<=height; j++ )
for( int i=0; i<=width; i++ )
{
pVertices[j*(width+1)+i].position = D3DXVECTOR3((float)i*tsize,m_hzmat[(j+1)*(width+1)+i+1],(float)j*tsize);
pVertices[j*(width+1)+i].normal = D3DXVECTOR3(0,0,0);
}

D3DXVECTOR3 v1,v2,v3,v4,vp;
for(j=1; j<height; j++ )
for( int i=1; i<width; i++ )
{
D3DXVec3Normalize( &v1, &(pVertices[j*(width+1)+i].position - pVertices[j*(width+1)+i-1].position) );
D3DXVec3Normalize( &v2, &(pVertices[j*(width+1)+i].position - pVertices[j*(width+1)+i+1].position) );
D3DXVec3Normalize( &v3, &(pVertices[j*(width+1)+i].position - pVertices[(j+1)*(width+1)+i].position) );
D3DXVec3Normalize( &v4, &(pVertices[j*(width+1)+i].position - pVertices[(j-1)*(width+1)+i].position) );
D3DXVec3Normalize( &vp, &(v1+v2+v3+v4) );

pVertices[j*(width+1)+i].normal = (vp.y>=0)? vp : -vp;
}

m_pVB->Unlock();

Donc, voila... chaud...
-----------------------------------
Kubo!!! http://ff6sol.com :big)

1 réponse

BumpMANN Messages postés 330 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 26 janvier 2009
13 mars 2004 à 21:44
ah aussi... j'ai fait un croquis vite fait... en fait je prends les vecteurs des arrêtes de la map (pour un point y'en a quatre) et je calcule le vecteur au millieu (la somme des quatres).
les quatres vecteurs faut aussi les normaliser: sinon la normale est évidemment verticale (x=1,x=-1,z=1,z=-1, donne un x=z=0. seul y peut changer), alors que la, x et z dépendent des y adjacents : p ... et pi je normalise aussi la normale obtenue puisqu'une seule fois au début ca suffit. Bonbonbonbon.... voila le croquis:

Arf. j'ai oublié de donner ce que ca donne Ô_o;

Bah vous voyez la: ya des zones qui sont toutes noires ou éclairées ou il faut pas :P comme si les normales étaient misent au hasard! j'ai vérifié: c'est pas le systeme d'éclairage qui marche pas puiske quand je met toutes les normales verticales, vers le haut, l'éclairage est régulier, normal (faites moi confiance, j'en suis sur! lol)

------------------------------------
Kubo!!! http://ff6sol.com :big)
0
Rejoignez-nous