Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: _Grey en 24 de Agosto de 2009, 04:40:14 PM

Título: cómo realizar un subtractive blending ??
Publicado por: _Grey en 24 de Agosto de 2009, 04:40:14 PM
Actualmente para un additive blending hago lo siguiente:


pD3dDevice7->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE , TRUE );

pD3dDevice7->SetRenderState( D3DRENDERSTATE_SRCBLEND , D3DBLEND_SRCALPHA);
pD3dDevice7->SetRenderState( D3DRENDERSTATE_DESTBLEND , D3DBLEND_ONE);


Cómo podría hacer un subtractive blending?? por la naturaleza de la operación, la cual incluye una suma, parece que es imposible.

Hay alguna manera sencilla de hacer subtractive blending?? cuando digo sencilla me refiero a poco más que jugar con el render state, es un código de hace algún tiempo que usa DirectX7.
Título: Re: cómo realizar un subtractive blending ??
Publicado por: tamat en 25 de Agosto de 2009, 12:26:28 PM
quizá haya algun método (inviertiendo, sumando y volviendo a invertir) pero si hablamos de hacerlo a pantalla completa a veces es más facil pintarlo en un rendertarget y aplicar un shader que haga la operacion adecuada.

Aunque me da que en tu caso sería matar moscas a cañonazos
Título: Re: cómo realizar un subtractive blending ??
Publicado por: senior wapo en 25 de Agosto de 2009, 04:08:29 PM
Como hacer subtractive blending con la fixed pipeline (no shaders):

OpenGL con la extensión  EXT_blend_subtract: 
    BlendEquationEXT , FUNC_REVERSE_SUBTRACT_EXT

Direct3D8 y superior:   
    D3DBLENDOP_REVSUBTRACT

Direct3D7 e inferiores, OpenGL sin dicha extensión:
Me temo que te toca aproximar el resultado con dos stages y otros modos de blending (subtract, addsigned2x, etc..),
Vamos, que en la práctica olvidate.
Título: Re: cómo realizar un subtractive blending ??
Publicado por: Pogacha en 25 de Agosto de 2009, 05:33:20 PM
Con un rendertarget tal vez puedas hacerlo.
Título: Re: cómo realizar un subtractive blending ??
Publicado por: _Grey en 26 de Agosto de 2009, 01:26:00 AM
Gracias por las respuestas.

Mis temores sobre los parametros del pipeline por defecto son ciertos. Me tocaría usar rendertargets y jugar con los stages de las texturas, usando la superficie de destino como textura de entrada.

Matar moscas a cañonazos, como dice tamat.

Probablemente lo intente aplicar de todas formas, por tener la capacidad más que nada, todo y que sería un proceso bastante costoso en cuestión de rendimiento.

Gracias.
Título: Re: cómo realizar un subtractive blending ??
Publicado por: Prompt en 26 de Agosto de 2009, 09:23:37 AM
No se si esto que voy a decir es lo que buscas. Hay 2 métodos para hacer blending de texturas o render targets etc...

1 Configurando las textura para que al "multiplicarlas" se haga de cierta manera, que es como creo que lo haces o se plantea aquí.
2 Utilizar glBlend, yo lo uso para el Lighting Stage de mi Deferred Rendering. También te digo que uso FBOs y Shaders.