Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Cronodragón en 18 de Octubre de 2005, 07:19:15 AM

Título: Problema Con Transparencia
Publicado por: Cronodragón en 18 de Octubre de 2005, 07:19:15 AM
 (http://www.teleportmedia.com/roleworld2/error_transparencia.jpg)

Hay un plano cuadrado con transparencia (como una ventana con cuatro vidrios) que está sobre un plano más grande. El plano grande se ve através de la "ventana", el problema es con el cono que queda cortado, la ventana no muestra los polígonos sino el fondo de la pantalla y el cuadro grande. ¿Me hace falta algo para que muestre todo el cono?

Estos son los estados que estoy usando:
// Establece la luz ambiente.
 _Dispositivo.SetRenderState(D3DRS_AMBIENT, _LuzAmbiente);

// Activa las luces.
 _Dispositivo.SetRenderState(D3DRS_LIGHTING, iTrue);
 _Dispositivo.SetRenderState(D3DRS_DITHERENABLE, iTrue);
 _Dispositivo.SetRenderState(D3DRS_SPECULARENABLE, iTrue);

// Desactiva el recorte de la cara no visible.
 _Dispositivo.SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);

// Activa el ZBuffer.
 _Dispositivo.SetRenderState(D3DRS_ZENABLE, iTrue);

// Activa la transparencia.
 _Dispositivo.SetRenderState(D3DRS_ALPHABLENDENABLE, iTrue);
 _Dispositivo.SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
 _Dispositivo.SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

// Establece el tratamiento para las texturas, con iluminación, transparencia,
// y suavisamiento.
 _Dispositivo.SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
 _Dispositivo.SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
 _Dispositivo.SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
 _Dispositivo.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
 _Dispositivo.SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
 _Dispositivo.SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
 _Dispositivo.SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
 _Dispositivo.SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);


Saludos!
-Marco
Título: Problema Con Transparencia
Publicado por: ProD en 18 de Octubre de 2005, 10:48:56 AM
 Buenas Marco!, a primera vista lo que me parece que está sucediendo es que lo mismo no se te pinta el trozo de cono que se vería a través del plano, porque primero estás dibujando el plano con alpha y luego el cono!. Si haces esto obviamente no se visualizará el cono pues cuando se hace la transparencia el cono no estaba pintado!. Mira a ver si es esto lo que te sucede. Un saludo
Título: Problema Con Transparencia
Publicado por: AK47 en 18 de Octubre de 2005, 10:59:35 AM
 Eso es, o dibujas el asunto en otro orden (primero las cosas opacas y luego las transparentes) o sino usas el alphatest :)
Título: Problema Con Transparencia
Publicado por: vincent en 18 de Octubre de 2005, 12:23:48 PM
 Las cosas transparentes siempre al final y ordenadas por distáncia a la camara
Título: Problema Con Transparencia
Publicado por: Pogacha en 18 de Octubre de 2005, 12:54:58 PM
 Exactamente, para dibujar transparencia con alpha blending debes hacerlo al final y de atraz hacia adelante, lo que no es transparente lo puedes hacer en cualquier orden usando el z-buffer. Puedes usar alpha-masking en vez de alpha-blending y no requeririas ordenarlo pero es otro efecto de transparencia ( ojo ).
Saludos
Título: Problema Con Transparencia
Publicado por: AK47 en 18 de Octubre de 2005, 12:55:43 PM
 Bueno, eso es segun el nivel de transparencia. Si sabes que los objetos van a ser opacos con alphas de 1 bit, es decir, pinto o no pinto, pero nada de semitransparencias, pues puedes usar el alphatest y listos, sin ordenar ni nada ;)
Título: Problema Con Transparencia
Publicado por: Astat en 18 de Octubre de 2005, 01:35:57 PM
 Para el tipo de transparencia que adivino en esa foto, yo cambiaria el valor del D3DRS_ALPHAREF y te quitas de problemas.
Título: Problema Con Transparencia
Publicado por: Cronodragón en 18 de Octubre de 2005, 04:23:56 PM
 Gracias! Con ordenar los objetos ha funcionado. :D

Citarel cono pues cuando se hace la transparencia el cono no estaba pintado!

Eso estuvo fácil de entender. Y yo que pensaba que era algo más complicado. (nooo)  
Título: Problema Con Transparencia
Publicado por: zupervaca en 18 de Octubre de 2005, 06:26:36 PM
 como has hecho funciona bien, pero en escenas complicadas puede resultarte dificil y costoso para la cpu el ordenarlos via soft, te recomiendo hecharle un tiempo a mirar el alphatest y veras que aun es mas facil todavia