Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: [EX3] en 01 de Enero de 1970, 01:00:00 AM

Título: Efectos en Sprites con DirectDraw
Publicado por: [EX3] en 01 de Enero de 1970, 01:00:00 AM
                                Nas a tod@s:

Estoy programando en Visual Basic con DirectX, y a la hora de 'Blitear' un Sprite uso la funcion 'BltFX' que permite aplicar efectos a las superficies. He conseguido aplicar los efectos de 'Espejado'(tanto en Vertical como en Horizontal) dado lo sencillos ke son, pero cuando intento hacer Rotacion del sprite no funciona, y tb estoy intentando aplicar el efecto de 'Translucencia' o 'Alpha-Blending', cosa ke tampoco estoy logrando. Me gustaria saber si hay alguien ke pudiese explicarme como utilizar al completo la funcion 'BltFX' o por lo menos las funciones mencionadas (Rotacion y Traslucencia). Agradeceria cualquier ayuda que me pudiesen prestar.

Saludos...

[EX3]                                
Título: Efectos en Sprites con DirectDraw
Publicado por: mac^threepixels en 01 de Enero de 1970, 01:00:00 AM
                                Tendrias que chequear las caps del dispositivo, para saber si lo soportan.

Pero te ahorrare el esfuerzo, no conozco ninguna tarjeta que rote sprites.                                
Título: Efectos en Sprites con DirectDraw
Publicado por: [EX3] en 01 de Enero de 1970, 01:00:00 AM
                                Hice la comprobacion de soporte y en efecto, mi targeta no soporta la rotacion de sprites, y como tu dices, posiblente ninguna lo haga.

Asi pues me olvido por el momento de aplicar ese efecto a los sprites.

Gracias.                                
Título: Efectos en Sprites con DirectDraw
Publicado por: DoVerMan_ en 01 de Enero de 1970, 01:00:00 AM
                                Pues nada EX3, q del alpha tmb t puedes olvidar, ya que las funciones para blitear graficos q traen las directdraw, no lo hacen.
Si quieres alpha blend tienes dos opciones,la primera,implementartelo tu mismo, para lo cual t sugiero asm (y si puedes utilizar mmx mejor).La segunda opcion, es pasarte a d3d que si que t lo hace.
Saludos a to el mundo.                                
Título: Efectos en Sprites con DirectDraw
Publicado por: [EX3] en 01 de Enero de 1970, 01:00:00 AM
                                ASM se puede usar en VB???                                
Título: Efectos en Sprites con DirectDraw
Publicado por: [EX3] en 01 de Enero de 1970, 01:00:00 AM
                                Por cierto, ke siempre me lo he preguntado, ke es exactamente ASM???                                
Título: Efectos en Sprites con DirectDraw
Publicado por: Lord Trancos en 01 de Enero de 1970, 01:00:00 AM
                                Lenguaje "ensamblador". Es para "programar la CPU directamente".
                               
Título: Efectos en Sprites con DirectDraw
Publicado por: DoVerMan_ en 01 de Enero de 1970, 01:00:00 AM
                                Pues la verdad es q nunca he programado en VB, pero imagino que si se podra utilizar "Ensamblador" con el.                                
Título: Efectos en Sprites con DirectDraw
Publicado por: synchrnzr en 01 de Enero de 1970, 01:00:00 AM
                                No estés tan seguro. A mi me suena que no se puede, aunque puedo estar equivocado...

Sync :guay:                                
Título: Efectos en Sprites con DirectDraw
Publicado por: fiero en 01 de Enero de 1970, 01:00:00 AM
                                En la versión 4 de VB no se podía, porque recuerdo que en la universidad hacian DLLs en C, para poder meter código ensamblador y luego cargaban la DLL desde Visual Basic.
No creo que se pueda directamente, ya que entonces se acabaría con la estabilidad de VB, ya que en asm es facil cagarla...

un saludo                                
Título: Efectos en Sprites con DirectDraw
Publicado por: [EX3] en 01 de Enero de 1970, 01:00:00 AM
                                Pos nada, ke me va a tocar hacer el efecto de 'alphablending' a "la antigua usanza", (pixel por pixel), si no me ekivoco en DirecDraw se pueden manipular los pixeles de una superficie, asi que tan solo tendre que hacer una mezcla de color entre el pixel de la superficie del sprite y el de la superficie donde lo dibuje, no? Weno, se intentara haber ke sale :sonriendo:

Muchas Gracias a todos...
[EX3]

P.D.: Lo ke no sabre es como hacer diferente nivel de transparencia en el 'alphablending', alguna sugerencia?                                
Título: Efectos en Sprites con DirectDraw
Publicado por: BeRSeRKeR en 01 de Enero de 1970, 01:00:00 AM
                                Si no me equivoco, la fórmula del alpha blending es:

Red_Final = Red_Fuente * Alpha + Red_Destino * (1 - Alpha)
Green_Final = Green_Fuente * Alpha + Green_Destino * (1 - Alpha)
Blue_Final = Blue_Fuente * Alpha + Blue_Destino * (1 - Alpha)

Saludos...
                               
Título: Efectos en Sprites con DirectDraw
Publicado por: [EX3] en 01 de Enero de 1970, 01:00:00 AM
                                Parece sencillo, 'Alpha' si no me equivoco es el grado de transparencia, no?                                
Título: Efectos en Sprites con DirectDraw
Publicado por: Lord Trancos en 01 de Enero de 1970, 01:00:00 AM
                                Q raro q no haya alphablend en DDraw,... pq me suena que habia una función del GDI que dibujaba un bitmap con AlphaBlend
                               
Título: Efectos en Sprites con DirectDraw
Publicado por: [EX3] en 01 de Enero de 1970, 01:00:00 AM
                                Haber si la hay:

object.BltFx( _
   destRect As RECT, _
   ddS As DirectDrawSurface7, _
   srcRect As RECT, _
   flags As CONST_DDBLTFLAGS, _
   BltFx As DDBLTFX) As Long

El problema es que no se como se configuran los flags de DDBLTFX (Conjunto de efectos para aplicar en las superficies) para realizar el 'AlphaBlending', ke desde un principio he intentado que alguien me explicase.

En la documentancion del SDK no lo explican, y no viene ningun ejemplo que use este metodo.

Por cierto Berseker, he comprobado el resultado que da la formula de antes y devuelve unos valores muy grandes para tratarlos como colores RGB, no falta alguna formula para convertir esos valores en valores RGB validos?

Saludos...                                
Título: Efectos en Sprites con DirectDraw
Publicado por: Juan Mellado en 01 de Enero de 1970, 01:00:00 AM
                                Hola [EX3],
la fórmula del alpha blending es la correcta. Ten en cuenta que el valor de alpha es un tanto por uno, es decir, que sólo puede contener un valor entre 0 y 1, ambos incluidos.

Espero haberte ayudado.                                
Título: Efectos en Sprites con DirectDraw
Publicado por: DoVerMan_ en 01 de Enero de 1970, 01:00:00 AM
                                                               
Título: Efectos en Sprites con DirectDraw
Publicado por: DoVerMan_ en 01 de Enero de 1970, 01:00:00 AM
                                Hola a todos.
Vamos a ver si me explico EX3:

Primero de todo, quiza t salgan unos valores muy grandes, porque no estas descomponiendo el pixel en sus componentes RGB.

Para realizar el alpha, con la formula de BeRSeRKeR, que creo es la correcta, deberias realizar lo siguiente (mas o menos):
1º.- Debes leer el pixel origen y el pixel destino.
2º.- Descomponer cada pixel en sus componentes RGB.
3º.- Aplicar las formulas.
4º.- Formar con las componentes RGB, que has obtenido en el paso anterior, un nuevo pixel.
5º.- Enviar el nuevo pixel al Surface destino

De ahi q antes t animara a utilizar asm, ya que todos estos pasos son lentos, no para un pixel, pero si cuando intentas hacerlo para una pantalla completa a 640x480 (307200 pixels).
                               
Título: Efectos en Sprites con DirectDraw
Publicado por: Juan Mellado en 01 de Enero de 1970, 01:00:00 AM
                                Hola, estaba releyendo el thread y he visto que Lord Trancos hacía referencia a que le sonaba una función del GDI que hacía alpha blending con bitmaps.

Buscando en la ayuda del SDK ha aparecido AlphaBlend(). Por si le sirve a alguien.

Saludos                                
Título: Efectos en Sprites con DirectDraw
Publicado por: [EX3] en 01 de Enero de 1970, 01:00:00 AM
                                Con lo del rango de 0 a 1 de la constante 'Alpha' dicho por Juan Mellado aplicado a la formula escrita por BeRSeRKeR consigo que me cuadren los valores resultantes.
Mi error fue ke le asignaba unos valores muy grandes a la constante 'Alpha' (25,50,...) y por eso me devolvia unos valores incompatibles (4800, -4500, ...), una metedura de pata por mi parte xD.

Muchas Gracias a todos.
[EX3]

[ Este Mensaje fue editado por: [EX3] el 2002-06-05 01:08 ]                                
Título: Efectos en Sprites con DirectDraw
Publicado por: Zaelsius en 01 de Enero de 1970, 01:00:00 AM
                                Sobre lo de meter código ASM en VB....

NO SE PUEDE

yo sí que controlo de VB y puedo deciros que no se puede meter ASM a pelo ahí.

Aun así,¿NO es una burrada perder recursos y velocidad con VB e intentar ganarla con ASM?



                               
Título: Efectos en Sprites con DirectDraw
Publicado por: DoVerMan_ en 01 de Enero de 1970, 01:00:00 AM
                                EX3, en gamedev.net, hay un monton de articulos sobre alpha blend, a mi particularmente uno de los q mas me han alludado es el siguiente:

http://gamedev.net/reference/articles/article817.asp

Cubre desde la aproximación mas simple a la solución del problema, hasta la implementación haciendo uso de la tecnologia mmx.
Por supuesto esta todo en ingles.
Para ver el resto de articulos accede a la sección de articulos (Articles & Resources desde la pagina principal en gamedev.net).

Saludos a todo el mundo.

[ Este Mensaje fue editado por: DoVerMan_ el 2002-06-05 11:19 ]                                
Título: Efectos en Sprites con DirectDraw
Publicado por: [EX3] en 01 de Enero de 1970, 01:00:00 AM
                                Echare un vistazo a los articulos, que algo encontrare que me ayude, aun asi ya tengo la manera de aplicar 'Alpha-Blending' a las superficies de DirectDraw7 con todo lo anterior que me habeis explicado.

Saludos...

[ Este Mensaje fue editado por: [EX3] el 2002-06-05 17:21 ]