Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema Con Transparencia

Iniciado por Cronodragón, 18 de Octubre de 2005, 07:19:15 AM

« anterior - próximo »

Cronodragón

 

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

ProD

 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
as ideas son capitales que sólo ganan intereses entre las manos del talento

AK47

 Eso es, o dibujas el asunto en otro orden (primero las cosas opacas y luego las transparentes) o sino usas el alphatest :)

vincent

 Las cosas transparentes siempre al final y ordenadas por distáncia a la camara
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Pogacha

 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

AK47

 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 ;)

Astat

 Para el tipo de transparencia que adivino en esa foto, yo cambiaria el valor del D3DRS_ALPHAREF y te quitas de problemas.

Cronodragón

 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)  

zupervaca

 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






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.