Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Simular Efecto Mira Telescopica

Iniciado por TotalNoob, 21 de Mayo de 2004, 09:39:35 PM

« anterior - próximo »

TotalNoob

 Ante todo querria presentarme en el foro. HOLA, espero estar mucho tiempo por aqui y aprender aun más y compartir todas mis experiencias con quien pida ayuda.

Llevo programando bastante tiempo, por lo que la metodologia de programación no es un "problema"

Como hobby me gusta programar pequeñas cosillas, y queria comentaros una pequeña duda:

vereis, estoy intentado simular el efecto de una mira telescopica en 2D

Basicamente tengo una pantalla de fondo y un sprite con un circulo totalmente blanco. La idea es dibujar el sprite del circulo sobre el fondo, pero que toda la pantalla se vea de color negro a excepcion del sprite del circulo donde se ha de ver el fondo, dando la sensacion de que estamos mirando por una mira.
La idea es hacerlo en DirectX, preferiblemente la version 7 (de momento no voy a tocar nada 3D?)

alguien se anima?

Gracias

shephiroth

 Buenas. Sé que lo has pedido para direct x, pero como para este no conocía nada y me daba pena no poder ayudarte, aqui te dejo un enlace a una página que hay un ejemplo practico de como hacerlo en opengl. No lo he leido, pero me imagino que por lo menos una idea te dará.

http://www.gametutorials.com/Tutorials/ope.../OpenGL_Pg2.htm

Suuerte ^^

TotalNoob

 Nas shephiroth. antes de nada, gracias por responder.

He estado mirando el ejemplo del link, y efectivamente, esta en OGL.  :(

intentare pasarlo a DirectX, cosa que aun no veo del todo clara, ya que desconozco como funcionan los flags y las funciones de blending del OGL (aunque todo hay que decirlo, de las de DirectX tambien ando un poco pez  :P

De todas formas, gracias....

sigo investigando

TotalNoob

 no hay forma :(

por lo poco que entiendo de OGL en el codigo del link hace:

glDisable(GL_DEPTH_TEST); //ni idea de lo que hace
glBlendFunc(GL_DST_COLOR,GL_ZERO);
glEnable(GL_BLEND)
//aqui mas codigo....
glBlendFunc(GL_ONE,GL_ONE);
//aqui mas codigo
//y finalmente:
glDisable(GL_BLEND);



y yo en mi codigo tengo algo como

Dev.SetRenderState D3DRENDERSTATE_ALPHABLENDENABLE,True
Dev.SetRenderState D3DRENDERSTATE_COLORKEYENABLE,True
Dev.SetRenderState D3DRENDERSTATE_COLORKEYBLENDENABLE,True
Dev.SetRenderState D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE
Dev.SetRenderState D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE


y no consigo ná  (grrr)

De todas formas el efecto que queremos conseguir es algo similar a este:


quizas me el nombre de efecto mira telescopica no era es mas apropiado, pero me parecio buena la aproximación según me comentaron por el canal

Espero que con la imagen quede mas claro  :D

[EX3]

 No se ve la imagen pero me imagino ke sera algo como esto:







Si este el caso es muy sencillo. Solo teneis ke dibujar el grafico ke representa la mirilla telescopica sobre toda la escena asignando transparencia al color blanco, asi solo se dibujara el vacio negro y las guias.

Por cierto, ke no lo has dejado muy claro del todo, estas programando en DirectDraw, lo kerria decir ke solo es 2D, o en Direct3D, lo kiere decir ke ya estais dibujando sobre poligonos y usando capacidades avanzadas de la tarjeta?

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

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

TotalNoob

 Vaya [EX3] la imagen no se ve

a ver si ahora:



o si no, en esta url: efecto

Tal como dije, quizas el nombre de efecto de mira telescopica no es el mas adecuado. Lo que queremos hacer es que unicamente se vea en los sprites la zona del fondo. Es decir, tenemos un fondo y un sprite todo blanco (o del color que sea) y lo que queremos ver es toda la pantalla negra, pero donde esten dibujados los sprites que se vea el fondo.

El efecto que muestra [EX3] esta muy bien, pero solo se aplica un sprite a toda la pantalla. En eso no hay problema, como comentas es muy sencillo. Pero como se ve en la imagen que he puesto o en la url, necesitamos poner mas de 1 sprite.

Segun los tutos que he estado mirando por inet lo que hay que hacer es:

-Copiar el fondo en una surface (no hay problema)
-Copiar el sprite en otra surface (tampoco hay problema en eso)
-hacer un BtlColorFill en negro de otra surface
-colocar 1,2 o n sprites
-renderizar la escena dejando todo en negro, a excepcion de precisamente donde estan los sprites.


En principio si que estamos usando solo DDraw, el sprite es completamente blanco. Primero queremos saber como hacer esas operaciones basicas. Luego ya me "complicare" intentando usar las capacidades del D3D para conseguir efectos como este:

efecto2

que es el que realmente nos gustaria conseguir  :rolleyes:

Por cierto [EX3] tu lib para juegos 2D esta que se sale! xDDDDDDDDD

TotalNoob

 Ostras pedrin, pulso en el link del efecto y me dice que no existe la pagina  (grrr)



ó www.geocities.com/vbrules2k/dxefecto.gif

[EX3]

 Lo ke kieres hacer es justo como dices y parecido a lo ke te decia.
Creas una superficie de color negro asignandole el ColorKey ke es lo ke define el color ke sera transparente, vamos, ke no se dibujara, a Blanco puro (RGB(255,255,255)) y luego pintas los circulos blancos donde kieras, para eso puedes usar la funcion que trae DDraw para dibujar primitivas y asi dibujas los circulos blancos donde y con el tamaño ke kieras. Luego representas la escena del juego y despues pintas la superficie negra con los circulos blancos. Asi conseguiras el efecto ke buscas, como ya te dije, es muy sencillo  :)

QUOTE ("TotalNoob")
Por cierto [EX3] tu lib para juegos 2D esta que se sale! xDDDDDDDDD [/quote]
Gracias, por cierto, si programas en VB te puede ser muy util y mas facil ke programar sobre directX a pelo.

Por cierto, ke no os extrañe ke no carge la web ultimamente, estan teniendo problemas en el servidor donde la tengo hospedada por temas de hackers y eso. Si va para mucho la migrare a lycos temporalmente.

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

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

[EX3]

 
QUOTE ("EX3")

Por cierto, ke no os extrañe ke no carge la web ultimamente, estan teniendo problemas en el servidor donde la tengo hospedada por temas de hackers y eso. Si va para mucho la migrare a lycos temporalmente.[/quote]
Ya esta migrada la web a lycos asi ke vuelve a estar online.

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

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

Thenend

 Pues se me ha ocurrido una cosa para hacer ese efecto y lo he programado a ver si funcionaba, lo he colgado aquí:

http://www.codigoverde.com/downloads/linterna.zip

No se si te servirá de algo.

Se trata de pintar el fondo negro como dice [EX3] con círculos blancos y luego dibujar todo lo demás en función del color del fondo, si es negro no se verá nada y si es blanco se verá todo.

TotalNoob

 Thenend tio, eres un mountruo (y no precisamente el de las galletas jejejejeje)

voy a mirar el codigo a ver que saco en claro.

Asias  :rolleyes:

....5 minutos mas tarde....

vaya... ta en .NET  (nooo)

esto.... me da error al compilar, no encuentra el archivo de cabecera D3D9.h

uhm...sera porque no tengo la SDK instalada?

200 y pico megas con mi modem de 56 Kb que realmente va a 45 pues como que tardare 2 semanas en conseguirlo...

de todas formas voy a estudiarlo

Asias man!

Thenend

 Sip está en DirectX 9.0b (pero no en .NET). Para compilarlo necesitas el úlimo SDK, el Summer Update, pero claro, con un modem tienes para rato XD

A ver si sacas algo del código. La textura del foco tiene alfa pero es una tontería, puedes símplemente hacer una en tonos blancos y grises con el fondo negro sin alfa ni nada y tirará igual, el truco está en que quede el fondo en blanco y negro.

Encantado de ayudar, y de paso también aprendo  :D  

TotalNoob

 Thenend, pues al final si que me ha servido, muchisimas gracias! jejeje

he usado DX8, ya que el VB no tira con el 9 y he conseguido el mismo efecto! jarl! xDDD

De todas formas, creo que en parte, ya va bien que la imagen del foco tenga el canal alpha, xq he hecho lo que me has comentado, de usar un bmp con  el fondo negro y el foco con degradados de blanco y gris, pero luego ocurre que cuando renderizas 2 o mas focos en la escena, al superponerse uno al otro que mal, pero ya te digo, con png con canal alpha...perfecto!

....14/220 megas de la SDK....el modem se va a "achicharrá" :P






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.