Movimiento en profundidad

Started by Yawin, June 09, 2011, 08:47:26 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

SplinterGU

mira estos escenearios





si el personaje se encuentra sobre la repisa (donde esta la soga y donde esta la escalera), no es el mismo tamaño que si se encuentra al lado de los huecos de la puerta, incluso sobre la misma Y, y tampoco el tamaño depende de la distancia al punto de fuga.

estas cosas no las puedes hacer calculando, estas cosas se programan con datos predefinidos (siempre hablando de aventuras graficas).
Download Lastest BennuGD Release: http://www.bennugd.org/node/2


Yawin

En la primera imagen el punto de fuga está claro. el tema es que el punto de fuga está en un plano en el infinito. Si tú estás desplazándote por un plano que está a una distancia x del punto de fuga: todos los puntos de ese plano están a la misma distancia del punto de fuga, y por tanto el tamaño no varía.

El tamaño varía cuando cambias de plano.

El tema es que yo no quiero trabajar con planos, porque no quiero usar 3D. Para eso, uso modo 7 y fin. Lo que busco es emular eso pero contando sólo con x e y
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

SplinterGU

pues no esta claro en la primera imagen, mira la alacena que donde esta el dragoncito y los tarros y el piso que esta a la misma altura sobre la derecha de la imagen, los personajes sobre esa alacena, deben ser grandes, y los que estan en el piso de piedra sobre la derecha se deberian ver mas chicos.

ahi no podes tener 1 punto de fuga que funcione.

bueno, no importa, como sea, muestranos tu idea funcionando cuando tengas avances.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Splinter, esa imagen no tiene un punto de fuga ¡tiene dos! :D
Pero eso es irrelevante, por lo general, las aventuras gráficas se permiten mantener el size intacto para ahorrar recursos, sobre todo si la distancia en profundidad es poca.

Pero de todas formas, el tamaño depende de la distancia hacia la linea del horizonte. Supongamos una pantalla de 200 pixels, con la linea del horizonte en el 100, he comprobado que si el personaje se mueve hacia el fondo de manera que queda en y=150 (a mitad de camino del horizonte), su tamaño debe ser del 50%, si está a 125 (a un cuarto del camino del horizonte) su tamaño debe ser un 25%... O sea, que la distancia que lo separa del horizonte respecto a su posición en el plano cercano determina el tamaño, tanto del personaje como de la distancias (por lo que si tiene un 50% de su tamaño, también se desplaza la mitad que en primer plano).

Pero esto tiene un par de pegas: si cambia la altura del personaje, los cálculos pueden no funcionar (sobre todo, cuando su altura es la misma que la de la linea del horizonte, en el ejemplo, un salto de 100 pixels de altura). Y que no es un escalado "real", sólo funciona cuando se toma el foco en el centro de la pantalla, cuando sólo hay un foco (no hay problema, siempre existe un foco justo delante del que observa, otra cosa es que coincida con las paredes de la casa). Si hay dos focos pasa como me pasaba a mi con el modo7 en el Drajon Lol y las increibles paredes menguantes :D :D :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

Quote from: Drumpi on June 11, 2011, 07:44:20 PM
Splinter, esa imagen no tiene un punto de fuga ¡tiene dos! :D
Pero eso es irrelevante, por lo general, las aventuras gráficas se permiten mantener el size intacto para ahorrar recursos, sobre todo si la distancia en profundidad es poca.

Pero de todas formas, el tamaño depende de la distancia hacia la linea del horizonte. Supongamos una pantalla de 200 pixels, con la linea del horizonte en el 100, he comprobado que si el personaje se mueve hacia el fondo de manera que queda en y=150 (a mitad de camino del horizonte), su tamaño debe ser del 50%, si está a 125 (a un cuarto del camino del horizonte) su tamaño debe ser un 25%... O sea, que la distancia que lo separa del horizonte respecto a su posición en el plano cercano determina el tamaño, tanto del personaje como de la distancias (por lo que si tiene un 50% de su tamaño, también se desplaza la mitad que en primer plano).

Pero esto tiene un par de pegas: si cambia la altura del personaje, los cálculos pueden no funcionar (sobre todo, cuando su altura es la misma que la de la linea del horizonte, en el ejemplo, un salto de 100 pixels de altura). Y que no es un escalado "real", sólo funciona cuando se toma el foco en el centro de la pantalla, cuando sólo hay un foco (no hay problema, siempre existe un foco justo delante del que observa, otra cosa es que coincida con las paredes de la casa). Si hay dos focos pasa como me pasaba a mi con el modo7 en el Drajon Lol y las increibles paredes menguantes :D :D :D

es lo que yo digo, no puedes hacer un algoritmo generico basado en 1 punto de fuga, no sirve, por eso puse esa imagen para ejemplificarlo, ademas de que el algoritmo no sirve porque en el algoritmo que mostro yawin, si te moves de izquierda a derecha el personaje cambia el tamaño y no sirve para casi ninguna aventura grafica.

totalmente de acuerdo, pero las aventuras graficas que modifican el tamaño de los personajes (como has dicho, no todas lo hacen), no se basan en algoritmos automaticos, los graficos se dibujan con sizes predefinidos.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

tiene tres puntos de fuga...
:D

SplinterGU

Quote from: Futublock on June 11, 2011, 09:37:17 PM
tiene tres puntos de fuga...
:D

posiblemente, lo que si se ve es que tiene mas de 1.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Yawin

Esta tarde os subo la nueva versión. Funciona de rechupete, aunque tiene un pequeño bug.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Yawin

Siento el doblepost:

Pensaba que tardaría en acabarlo más rato, pero aquí está. Una nueva versión, creo que bastante buena, y con un código notablemente más limpio.

http://www.mediafire.com/?ev4mw6qf2g6u8c2

Nota: Si se pega el objeto a una esquina y se trae hacia la pantalla el objeto, no parece seguir la linea de fuga, pero, en realidad, lo que ocurre, es que tanto el mapa como el mapa de durezas están hechos con el paint y, por tanto, no mantiene las proporciones como debería xDD
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end


Yawin

Muchas gracias. Ahora estoy mirando como hacer un efecto de scroll, para poder hacerjuegos estilo paper mario y así.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

SplinterGU

ahora es otra cosa... te quedo muy bien!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Yawin

¿Ahora se entiende a qué me refería? Esque a veces no me explico bien xDDDD
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

SplinterGU

se entendia a que te referias, pero eso que has hecho solo sirve para modelos de un solo nivel de altura... y como estaba antes, el del calcular todo segun el punto de fuga estaba mal, ahora solo cambias sobre el movimiento vertical, entonces ahora esta bien en ese nivel.

quizas deberias agregar 3 variables locales, x0,y0,z0, y trabajar sobre estas a nivel usuario, y que en tu engine bases la proyeccion (size) en base a la z0, y a nivel final antes del dibujado, transformes x=x0, y=se base en z0 (profundidad) y y0 (altura), asi puedes por ejemplo hacer un personaje que pueda saltar sin verse afectado por la proyeccion, ya que si un personaje salta vas a cambiar su "y" y si eso pasa se vera afectado por el punto de fuga y mientras salte se vera mas chico.

no se si me explico.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2