Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: CoLSoN2 en 09 de Febrero de 2003, 12:46:22 AM

Título: Problema con sprites en D3D
Publicado por: CoLSoN2 en 09 de Febrero de 2003, 12:46:22 AM
                                Bueno, tengo un codigo para renderizar sprites (las modificaciones pertinentes de cámara están a parte), pero el problema es que si ejecuto otro codigo para renderizar sistemas de particulas, el sprite en vez de dibujarse sólo su parte opaca (utiliza color key), se ve un cuadro negro.
El código para el sprite es:


m_dev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);

m_dev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);



m_dev->SetVertexShader(FVF_VERTEX1);



if(m_texture != NULL)

{

 m_texture->Set(m_dev);

 m_dev->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);

if (FAILED(m_dev->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1)))

 return 0;

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

 return 0;

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

 return 0;

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

 return 0;

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

 return 0;



}

else

{

 m_dev->SetTexture(0, NULL);

}



m_dev->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, m_pVertices, sizeof(sVERTEX));



m_dev->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_DISABLE);



if (FAILED(m_dev->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW)))

 return 0;



y para el sistema d particulas:


);



if (!texture->Set(dev))

 return false;



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->SetRenderState( D3DRS_ZWRITEENABLE, FALSE );

   dev->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );





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

 return false;

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

 return false;

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

 return false;

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

 return false;

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

 return false;



dev->SetVertexShader(FVF_PARTICLE1);

dev->SetStreamSource(0,vb,sizeof(VERTEX_PARTICLE));





// todo el rollo del vb dinamico..



dev->SetRenderState( D3DRS_POINTSPRITEENABLE, FALSE );

dev->SetRenderState( D3DRS_POINTSCALEENABLE,  FALSE );

   dev->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );

   dev->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );

                               
Título: Problema con sprites en D3D
Publicado por: Lord Trancos en 09 de Febrero de 2003, 10:40:00 AM
                                En el codigo del sprite no veo q estes activando el alpha-blending o el alpha-testing.

Pal alpha-testing (q es para el colorkey, pero no para semi-transparencias/translucideces) usa esto:



 D3DDEV8.SetRenderState(D3DRS_ALPHAREF, 1);

 D3DDEV8.SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);

 D3DDEV8.SetRenderState(D3DRS_ALPHATESTENABLE, 1);

                               
Título: Problema con sprites en D3D
Publicado por: CoLSoN2 en 09 de Febrero de 2003, 12:54:02 PM
                                eso soluciona el problema, gracias :)

Aunque verás, el sprite es una cruz roja. (lo he revisado bien y sólo hay color rojo, está hecho pixel a pixel así q..) pero al renderizarlo sale la cruz roja, con un miniborde negro, sabes porque puede ser?                                
Título: Problema con sprites en D3D
Publicado por: BeRSeRKeR en 09 de Febrero de 2003, 04:06:34 PM
                                Eso es por el filtrado de textura...prueba a desactivarlo

Saludos                                
Título: Problema con sprites en D3D
Publicado por: CoLSoN2 en 09 de Febrero de 2003, 09:40:24 PM
                                eso era, gracias :)                                
Título: Problema con sprites en D3D
Publicado por: DraKKaR en 09 de Febrero de 2003, 09:57:39 PM
                                mejor ke desactivar el filtro, podrias poner el wrap mode de la textura en clamp y no en repeat (que es como viene por defecto). Te sale ese borde pq como esta en repeat el pixel del borde de la textura se filtra con el del borde opuesto. Asi podras flitrar la imagen y no dejarla sin filtro ke kedara pixelada :P