Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: CoLSoN2 en 06 de Diciembre de 2002, 03:22:38 PM

Título: Sistemas de Particulas con d3d-pointsprites
Publicado por: CoLSoN2 en 06 de Diciembre de 2002, 03:22:38 PM
                                Estoy trasteando con este tema pero tengo un pequeño problema. Si pongo la cámara justamente perpendicular a las particulas se ve de coña, aún cuando "strafeo" con la cámara, también. se ve así:

(http://www.warcraft3es.com/parts1.GIF)

pero si cambio la dirección de la cámara a alguna no-perpendicular, se ve así:

(http://www.warcraft3es.com/parts2.GIF)

el codigo de render es este:



D3DXMATRIX mat;

D3DXMatrixIdentity(&mat);

dev->SetTransform(D3DTS_WORLD,&mat);



if (!texture->Set(dev))

 Log("Texture Set faileD!");



dev->SetRenderState(D3DRS_POINTSPRITEENABLE, true);

dev->SetRenderState(D3DRS_POINTSCALEENABLE,  true);

dev->SetRenderState(D3DRS_POINTSIZE,     FtoDW(0.08f));

dev->SetRenderState(D3DRS_POINTSIZE_MIN, FtoDW(size.min));

dev->SetRenderState(D3DRS_POINTSIZE_MAX, FtoDW(size.max));

dev->SetRenderState(D3DRS_POINTSCALE_A,  FtoDW(0.00f));

dev->SetRenderState(D3DRS_POINTSCALE_B,  FtoDW(0.00f));

dev->SetRenderState(D3DRS_POINTSCALE_C,  FtoDW(1.00f));

dev->SetRenderState(D3DRS_SRCBLEND, srcBlendMode);

dev->SetRenderState(D3DRS_DESTBLEND, destBlendMode);



dev->SetVertexShader(FVF_PARTICLE1);



VERTEX_PARTICLE *verts;

verts = new VERTEX_PARTICLE[GetActiveParts()];

int j=0;

for (int i=0;i<numParticles;i++)

{

 if (particles[i].age < particles[i].lifetime)

 {

  verts[j].position = particles[i].pos;

  verts[j].color = D3DCOLOR_ARGB((BYTE)particles[i].color.a,

   (BYTE)particles[i].color.r,(BYTE)particles[i].color.g,

   (BYTE)particles[i].color.b);

  verts[j].pointsize = particles[i].size;

  j++;

 }

}



if (FAILED(dev->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE)))

 Log("ERROR! SetTextureStageState: D3DTSS_COLOROP");

if (FAILED(dev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE)))

 Log("ERROR SetTextureStageState: D3DTSS_COLORARG1");

if (FAILED(dev->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE)))

 Log("ERROR! SetTextureStageState: D3DTSS_COLORARG2");

if (FAILED(dev->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR)))

 Log("ERROR! SetTextureStageState: D3DTSS_MINFILTER");

if (FAILED(dev->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR)))

 Log("ERROR! SetTextureStageState: D3DTSS_MAGFILTER");



char cad[50];

sprintf(cad,"Active: %d",GetActiveParts());

Log(cad);

if (FAILED(dev->DrawPrimitiveUP(D3DPT_POINTLIST,j,verts,sizeof(VERTEX_PARTICLE))))

 Log("Render failed!");



dev->SetRenderState( D3DRS_POINTSPRITEENABLE, FALSE );

dev->SetRenderState( D3DRS_POINTSCALEENABLE,  FALSE );





sí, no uso Vb. pero no quiero usarlos hasta que funcione bien todo el tema :P Por cierto, creeis que sería más óptimo lockear/unlockear a cada render para cambiar las propiedades de las partículas, o eso consumiría muchos recursos?

thx in advance :P                                
Título: Sistemas de Particulas con d3d-pointsprites
Publicado por: Degiik en 06 de Diciembre de 2002, 03:29:08 PM
                                Creo que todo se resume en Billboarding.

http://www.stratos-ad.com/forums2/viewtopi...?t=631&start=45                                
Título: Sistemas de Particulas con d3d-pointsprites
Publicado por: ethernet en 06 de Diciembre de 2002, 03:45:58 PM
Me molan tus post por la fotitos XD.
Título: Sistemas de Particulas con d3d-pointsprites
Publicado por: CoLSoN2 en 06 de Diciembre de 2002, 03:59:03 PM
                                degiik creo que con los pointsprites de d3d no hace falta usar billboarding, por eso lo digo...

ethernet hay que dar algun aliciente para que la gente los lea xD y una imagen vale más que mil palabras ;P                                
Título: Sistemas de Particulas con d3d-pointsprites
Publicado por: CoLSoN2 en 06 de Diciembre de 2002, 07:45:10 PM
                                ya está arreglado, era una parida del zbuffer ;P                                
Título: Sistemas de Particulas con d3d-pointsprites
Publicado por: ethernet en 06 de Diciembre de 2002, 08:14:34 PM
No digas quien te ha dado la idea colson de lo del zbuffer xD no no lo digas (tengo log's) ;PPP
Título: Sistemas de Particulas con d3d-pointsprites
Publicado por: CoLSoN2 en 06 de Diciembre de 2002, 11:39:56 PM
                                xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

vale, a sio el ethernet :P                                
Título: Sistemas de Particulas con d3d-pointsprites
Publicado por: ethernet en 07 de Diciembre de 2002, 12:15:25 AM
va tio, no era necesario q me dieras credito xDDD :)
Título: Sistemas de Particulas con d3d-pointsprites
Publicado por: CoLSoN2 en 07 de Diciembre de 2002, 03:53:10 AM
                                va, dejemos de contestar a este estúpido post XD