Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Blending con Dx9

Iniciado por Degiik, 05 de Marzo de 2007, 11:34:11 PM

« anterior - próximo »

Degiik

Hola os expongo mi problema.

Dispongo de una textura A con todos los pixeles del siguiente color:

RGBA ( 0.8 , 0.6, 0.4, 1.0 )

y de la textura B con los pixeles:

RGBA ( 0.6, 0.4, 0.2, 0.5 )

Renderizando primero A (back) y después B (front), y usando:

IDirect3DDevice9::SetRenderState (D3DRS_SRCBLEND, D3DBLEND_SRCALPHA)
IDirect3DDevice9::SetRenderState (D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA)

/*
D3DBLEND_SRCALPHA
   Blend factor is (As, As, As, As).
D3DBLEND_INVSRCALPHA
   Blend factor is ( 1 - As, 1 - As, 1 - As, 1 - As).
*/

el pixel resultante del blending es:

RGBA ( )

Formula:

OutputPixel = (SrcPixel x ScrBlendMode) + (DstPixel x DstBlendMode)  

OutputPixel  = RGBA ( 0.8 * 0.5, 0.6 * 0.5, 0.4 * 0.5, 1.0 *  0.5) + RGBA ( 0.6 * (1 - 0.5), 0.4 * (1 - 0.5), 0.2 * (1 - 0.5), 0.5 * (1 - 0.5))

OutputPixel  = RGBA ( 0.4, 0.3, 0.2, 0.5) + RGBA ( 0.3, 0.2, 0.1, 0.25 )

OutputPixel  = RGBA ( 0.7, 0.5, 0.3, 0.75)

( corregirme si me he equivocado )

Como puedo hacer para que entre los componentes RGB se calcule el blending, pero sobre la componente A quede con el valor del DstPixel ?

Es decir:

OutputPixel  = RGBA ( 0.7, 0.5, 0.3, 1.0)
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

senior wapo

Googlea SetTextureStageState y juega con los parametros TB_COLOR_OP en D3DTOP_MODULATE y TB_ALPHA_OP en D3DTOP_SELECTARG1 o similares.

marcode

creo que se puede hacer con D3DRS_SEPARATEALPHABLENDENABLE, pero nunca lo he probado y no sé que tarjetas lo soportan.

Mírate los últimos "render state types" enumerados
http://msdn2.microsoft.com/en-us/library/bb172599.aspx
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

Degiik

Cita de: "marcode"creo que se puede hacer con D3DRS_SEPARATEALPHABLENDENABLE, pero nunca lo he probado y no sé que tarjetas lo soportan.

Mírate los últimos "render state types" enumerados
http://msdn2.microsoft.com/en-us/library/bb172599.aspx

Que grande !!!
Antes de poner el post pensaba como últmo recurso un PixelShader. Pero ahora tengo justo lo que necesitaba, tratar el Alpha por separado.

SEPARATEALPHABLENDENABLE me funciona en una 7600gt lo digo por si alguien lo quiere tener como referencia.

Gracias por las respuestas.  
:wink:
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )






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.