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]
Tendrias que chequear las caps del dispositivo, para saber si lo soportan.
Pero te ahorrare el esfuerzo, no conozco ninguna tarjeta que rote sprites.
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.
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.
ASM se puede usar en VB???
Por cierto, ke siempre me lo he preguntado, ke es exactamente ASM???
Lenguaje "ensamblador". Es para "programar la CPU directamente".
Pues la verdad es q nunca he programado en VB, pero imagino que si se podra utilizar "Ensamblador" con el.
No estés tan seguro. A mi me suena que no se puede, aunque puedo estar equivocado...
Sync :guay:
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
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?
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...
Parece sencillo, 'Alpha' si no me equivoco es el grado de transparencia, no?
Q raro q no haya alphablend en DDraw,... pq me suena que habia una función del GDI que dibujaba un bitmap con AlphaBlend
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...
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.
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).
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
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 ]
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?
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.aspCubre 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 ]
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 ]