Foros - Stratos

Programadores => Código de la Semana => Mensaje iniciado por: ethernet en 27 de Octubre de 2002, 06:03:22 PM

Título: Uso de FVF de D3D
Publicado por: ethernet en 27 de Octubre de 2002, 06:03:22 PM




void CXMalla::EstablecerFVF(DWORD FVF,bool convertir)

{

               DWORD d;CXFVF ant;



m_FVF.FVF=FVF;

m_FVF.tamanyo=D3DXGetFVFVertexSize(FVF);

m_FVF.desp_diffuse=0;

m_FVF.desp_specular=0;



for(d=0;d<CX_MAX_MTEXT;d++) m_FVF.desp_textura[d]=0;



// Calculamos el desplazamiento en bytes



d=0;

if((FVF & D3DFVF_XYZ)==D3DFVF_XYZ) d=3*4; // 3 float

if((FVF & D3DFVF_XYZRHW)==D3DFVF_XYZRHW) d=4*4; // 4 float

if((FVF & D3DFVF_XYZB1)==D3DFVF_XYZB1) d=(3+1)*4;

if((FVF & D3DFVF_XYZB2)==D3DFVF_XYZB2) d=(3+2)*4;

if((FVF & D3DFVF_XYZB3)==D3DFVF_XYZB3) d=(3+3)*4;

if((FVF & D3DFVF_XYZB4)==D3DFVF_XYZB4) d=(3+4)*4;

if((FVF & D3DFVF_XYZB5)==D3DFVF_XYZB5) d=(3+5)*4;



if(FVF & D3DFVF_NORMAL) d+=(3)*4;

if(FVF & D3DFVF_PSIZE) d+=(1)*4;



if(FVF & D3DFVF_DIFFUSE) {

 m_FVF.desp_diffuse=d;

 d+=(1)*4;

}



if(FVF & D3DFVF_SPECULAR) {

 m_FVF.desp_specular=d;

 d+=(1)*4;

}

DWORD w,k=FVF>>D3DFVF_TEXCOUNT_SHIFT;



if(k>CX_MAX_MTEXT) k=CX_MAX_MTEXT;



for(w=0;w<k;w++) {

 m_FVF.desp_textura[w]=d;

 d+=(2)*4;

}

}



void CXMalla::EstablecerDiffuse(DWORD Diffuse,DWORD inicial,DWORD nvert)

{

CXVERTEX *dest;DWORD *diffuse,n;



if(m_FVF.desp_diffuse==0) return;



m_VB->Lock(0,0,(BYTE **)&dest,0);



// Saltamos hasta el diffuse



dest+=m_FVF.desp_diffuse;



if(nvert!=0) {

 dest+=inicial*m_FVF.tamanyo;

 n=nvert;

}

else n=m_NVertices;



while(n-->0) {

 diffuse=(DWORD *)dest;

 *diffuse=Diffuse;

 dest+=m_FVF.tamanyo;

}

m_VB->Unlock();

}





Título: Uso de FVF de D3D
Publicado por: ethernet en 29 de Octubre de 2002, 11:28:40 AM
No he usado nunca d3d pero aunque sean un poco estupideces no esta mal comentarlas:

-En EstablecerDiffuse te puede ahorrar la variable DWORD *diffuse haciendo:



*(DWORD *)dest=Diffuse;



o mucho mejor usar los cast de c++



*static_cast<DWORD *>dest=Diffuse;



-Por otro lado en ese cast vas a dar a un vector de d3d, no se como van los vectores en d3d pero cuando se hacen cosas de esas hay q tener en cuenta el factor de empaquetamiento.


Saludos
Título: Uso de FVF de D3D
Publicado por: ethernet en 31 de Octubre de 2002, 10:15:50 PM
vosotros tb podeis postear, no mata y no es malo para la salud.

saludos
Título: poo
Publicado por: CoLSoN2 en 01 de Noviembre de 2002, 12:15:06 AM
                                io no posteo xq no le encuentro utilidad al codigo, pa kes esto ? pa ahorrarte 4 defines? XD                                
Título: Uso de FVF de D3D
Publicado por: ethernet en 01 de Noviembre de 2002, 01:24:35 AM
Por esto mismo pongo en las recomendaciones q es mejor poner un codigo donde lo uses o un ejemplo de uso, mucho mas visible.

saludos