Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: notoi en 24 de Marzo de 2009, 01:43:51 PM

Título: Hacer un fade
Publicado por: notoi en 24 de Marzo de 2009, 01:43:51 PM
 Para hacer un fade cual es la mejor manera?? probe a hacer una copia de la pantalla primaria en una surface que cree de forma temporal. Y en un bucle voy decrementando los pixeles y  haciendo la copia del buffer a la primaria. Pero se ve lentisimo. Algun consejo?? Estoy haciendo mi juego bajo directx 7, para empezar. Si lo acabo el siguiente ya mirare como va directx 9.
Título: Re: Hacer un fade
Publicado por: [EX3] en 24 de Marzo de 2009, 03:19:10 PM
Yo en DirectDraw jugaba con los canales RGB del factor Gamma, usando valores de 255 a -255 por canal. Aunque supongo que estarás tirando código en C++ te paso el enlace a un ejemplo que hace eso en Visual Basic 6.0 por si te sirve de ayuda:

http://directx4vb.vbgamer.com/DirectX4VB/Tutorials/DirectX7/DD_Gamma.asp

Si usaras Direct3D7 podrias usar un Quad (dos poligonos formando un cuadrado) pintado en negro y jugar con sus valores Alpha para regular la transparencia, que seria la misma forma en Direct3D8 y Direct3D9 respectivamente.

Salu2...
Título: Re: Hacer un fade
Publicado por: notoi en 24 de Marzo de 2009, 10:17:03 PM
Gracias por la respuesta. Investigare eso de la gamma. Aps, mas bien estoy haciendolo en C, aunque tenia un libro de C++ que empeze a leer pero q no acabe y mas o menos estoy un poco familiarizado con las clases, constructores,etc.
Título: Re: Hacer un fade
Publicado por: IDandT en 11 de Abril de 2009, 03:31:59 AM
Cita de: [EX3] en 24 de Marzo de 2009, 03:19:10 PM
Yo en DirectDraw jugaba con los canales RGB del factor Gamma, usando valores de 255 a -255 por canal. Aunque supongo que estarás tirando código en C++ te paso el enlace a un ejemplo que hace eso en Visual Basic 6.0 por si te sirve de ayuda:

http://directx4vb.vbgamer.com/DirectX4VB/Tutorials/DirectX7/DD_Gamma.asp

Si usaras Direct3D7 podrias usar un Quad (dos poligonos formando un cuadrado) pintado en negro y jugar con sus valores Alpha para regular la transparencia, que seria la misma forma en Direct3D8 y Direct3D9 respectivamente.

Salu2...


Yo he usado alguna vez esa ultima opcion al trabajar con XNA. Creaba un Texture2D, de un solo pixel y lo pintaba escalado a pantalla completa variando el valor de canal Alpha. Es efectivo y muy simple de programar, al menos con XNA, DX u otra API que te permita hacerlo.

Lo de un solo pixel lo hacia por ahorrar memoria y coste de inicializacion. Da el mismo resultado hacer eso y escalarlo a toda la pantalla, que hacerlo del tamaño del area a cubrir directamente y volcarlo a pelo.