Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas al hacer alphablend con Direct Graphics

Iniciado por [EX3], 06 de Mayo de 2003, 08:56:39 PM

« anterior - próximo »

[EX3]

                                Nas:

Tengo problemas al realizar alphablend sobre una textura en Direct Graphics, el alphablend me lo hace pero no respeta el ColorKey de la transparencia de la textura, en vez de omitir el color que no debe dibujar lo muestra en negro.

El codigo que uso lo saque de un ejemplo de Direct3D7:



           Device.SetRenderState D3DRENDERSTATE_ALPHABLENDENABLE, 1

           Device.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA

           Device.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA

           Device.SetRenderState D3DRS_TEXTUREFACTOR, D3DColorRGBA(255, 255, 255, AlphaBlendValue)

           Device.SetTextureStageState 0, D3DTSS_ALPHAARG1, D3DTA_TFACTOR





Si hay otra forma de hacer el alphablend en Direct Graphics agradeceria que me la explicaran.

Gracias y Salu2...

[EX3]                                
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

BeRSeRKeR

                                Aquí tienes un tuto que escribí hace tiempo sobre alpha blending:

http://www.arrakis.es/~jonathan01/programm...g/D3D8/tut6.htm

Saludos                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

[EX3]

                                He visto tu tutorial sobre AlphaBlend y esta muy interesante, pero ese metodo, por lo que he visto, no me permite hacer alphablending progresivo, vamos, que no puedo decirle que intensidad de transparencia tiene que darle a la textura al renderizar, corrigeme si me equivoco, que en d3d toadavia estoy tan verde como RGB(0,255,0) :jaja:.

Esto es lo que conseguia hacer en una version de la dx_lib32 que era un hibrido entre DirectDraw y Direct3D 'Inmediate Mode' (DirectX 7), ahi utilizaba el codigo anterior y parecia que funcionaba:
http://usuarios.lycos.es/dxlib32/images/OldVer/01.JPG
http://usuarios.lycos.es/dxlib32/images/OldVer/02.JPG

Esto es lo que me ocurre con Direct Graphics utilizando el mismo codigo:
http://usuarios.lycos.es/dxlib32/images/Test/101.jpg                                
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

BeRSeRKeR

                                No estoy seguro de entenderte....¿te refieres a por ejemplo especificar en el canal alpha un degradado de blanco a negro (pasando por todas las tonalidades de grises) y que después a la hora del render se realice la transparencia progresivamente?.

Si es eso, entonces los texture stage states necesarios serían, y lo digo de memoria ( y mi memoria es muy mala :jaja:):

g_pD3DDev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);

g_pD3DDev->SetTextureStageState(0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1);

g_pD3DDev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);

// Esto es lo que hace el degradado progresivo

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

g_pD3DDev->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);


Hmm....por cierto, el texture factor no te hace falta para el alpha blending...a no ser que quieras conseguir alguna cosa rara :D...

Saludos                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

[EX3]

                                Es mas sencillo, me refiero al alphablending tradicional, ese que le pasas como parametro la intensidad de transparencia que tendria la textura entera, solo que no se por que no me respeta el ColorKey de la textura, color que no tiene ke dibujar.

Me mosquea que acabo de encontrar un ejemplo que hace lo que yo kiero, utilizando bitmaps. Es un ejemplo de mecanica de particulas, cada particula es un pequeño bitmap que se va haciendo mas transparente dependiendo de la distancia, pero no logro entender el codigo responsable del alphablend. Seguire ojeandolo, ke insistiendo se consigue todo, jeje  :ojo:

Por cierto, lo del D3DRS_TEXTUREFACTOR me venia en el codigo del ejemplo de DirectX7 y sin el no funcionaba el alphablend.

Salu2...                                
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

MChiz

                                Buenas!
Porque no pruebas a utilizar el AlphaTest? En teoria acelera mucho, ya que a todo lo que no se tenga que pintar no se le hace el AlphaBlending.
Suerte!                                

[EX3]

                                Hombre, el tema no es ke haga el alphablend a las zonas con el ColorKey, simplemente ke no las dibuje.

Por cierto, ¿Sabes de algun tuto que explique el uso del AlphaTest?
Gracias.

Salu2...

P.D.: Al final no he logrado entender el funcionamiento del alphablend de akel ejemplo ke me baje, a parte de la ayuda ke me podais brindar seguire buscando por ahi.                                
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

MChiz

                                Pues no, no se ninguno. Pero estoy seguro que habra algun sample en las SDK de D3D. Y si no mira la ayuda, que esta mamao ( almenos en GL ).
Suerte!                                

[EX3]

                                Pos la ayuda del SDK de las DirectX para mi nunca ha sido muy clara ke digamos y ejemplos de AlphaBlend habia uno o dos creo y tampoco son muy sencillos de comprender, al menos para mi  :oops: y en la web ke miraba cada cierto tiempo, vbdx4 o algo parecido, del amigo Hoxley, no trabajan mucho el tema del alphablend.

Weno, cuando tenga algo de tiempo libre seguire buscando por ahi, ke por narices tendre que encontrar algo, digo yo.

Salu2...                                
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

MChiz

                                Tienes el .CHM que viene con el SDK de DirectX? Ahi te viene la ayuda.
La funcion en cuestion es SetRenderState. Le pasas D3DRS_ALPHATESTENABLE y luego retocas el AlphaFunc... mas o menos :b
A las malas, si quieres, intento hacer un ejemplo. Total, me tengo que poner ya con DirectX...                                

[EX3]

                                El CHM.* lo tengo y algo vi del AlphaTest, probare por mi cuenta a ver ke saco en claro, y si te decides hacer el ejemplo y decides compartirlo te lo agradeceria mucho  :D

Aun asi me mosquea ke de la otra manera me funcionase en Dx7 y no me tire en Dx8  :(

Salu2...                                
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

MChiz

                                Vale. Pues cuando haga mis cosillas con D3D, mirare lo del AlphaTest. Aun asi, estoy seguro de que por aqui habra alguien que lo tenga hecho. Asi que si alguien le puede ayudar... Venga hombre, que solo son dos lineas ( creo :b )!!
Si lo consigues por tu cuenta, avisa! : )
A mi tambien me parece raro que en D3D7 se rulase, y ahora no. Seguro que lo haces todo igual?                                

[EX3]

                                Bajate el ejemplo del ke me base para hacer el hibrido entre DirectDraw & Direct3D, de ahi saque el codigo para el alphablend:
http://usuarios.lycos.es/dxlib32/publico/direct5d.zip
Por cierto, el ejemplo no hacia la transparencia del ColorKey, pero si lo acticvas te lo hace. Sinceramente, este ejemplo es un poco chapuza, jeje

Estuve haciendo algunas pruebas con el AlphaTest, ke al final lo encontre en el *.CHM, pero no logre hacer que funcionase. Todavia estoy buscando por la red, a ver si encuentro algun ejemplo que tire, ya sea en C++ o VB, mientras tire.

Salu2...                                
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

MChiz

                                mmm... entonces lo que quieres conseguir es el efecto que aparece en la demo que me has dado. Cual de tantos es? Creo que el de los ojos del centro de la pantalla, no?                                

[EX3]

                                Si no recuerdo mal, la cara utiliza el D3DBLEND_ONE, ke segun la intensidad del color, mientras mas osucro mas transparente y mas claro menos. Con ese metodo no tengo problemas. A la textura que da vueltas se le aplica el alphablend normal y corriente, esa es la tecnica que me esta dando la lata, por ke el alphablen si me lo hace, pero me pinta las zonas vacias de la textura. Eso es lo ke estoy intentando arreglar, sin tener exito.                                
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt






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.