Recent

Author Topic: Concepto de Cámara con BGRABitmap  (Read 1953 times)

mosquito

  • Full Member
  • ***
  • Posts: 141
Concepto de Cámara con BGRABitmap
« on: December 29, 2020, 05:58:50 pm »
Me gustaría desarrollar el concepto de Cámara para videojuego 2D o aplicación gráfica.
Voy a usar BGRABitmap.

Por poner un ejemplo:

- tengo un bitmap en memoria de 2000x2000 px. Quiero que esto sea el background (digamos que es la imagen de una galaxia)

- por otro lado tengo imágenes pequeñas (unos planetas), están dispersos en una segunda capa sobre el background.

- la "vista" es un control de Lázarus de 250x250 px (canvas,paint,virtualscreen,o cualquier otro). Quiero desplazar (o causar el efecto) suavemente por toda la galaxia respetando la posición de cada planeta, etc.

Ahora es cuando me pasan por la cabeza diferentes locuras (por desconocimiento del funcionamiento de un render 2D entre otras muchas cosas):

- hacer scroll por código del control

- tratar la cámara como un vector offset y pintar todo con respecto a esta en cada ciclo.

- mover el background y los planetas físicamente

- mantener todo en memoria y renderizar solo un clipping de 250x250

- tampoco se si en 2D existe algo como en 3D para no computar cosas que no estan en la vista, o algo así.


Cualquier tipo de sugerencia u opinión me sería de gran ayuda.

lainz

  • Hero Member
  • *****
  • Posts: 4468
    • https://lainz.github.io/
Re: Concepto de Cámara con BGRABitmap
« Reply #1 on: December 29, 2020, 07:51:41 pm »
Todo de puede mover la cámara y los objetos. En decir la cámara mueve por un offset a todos los objetos, que tienen su movimiento individual.

Y para saber si el objeto está dentro de la cámara necesitas una función rectangle.inrect(other) que creo que ya viene con fpc. El rectángulo es el área de la cámara con el offset aplicado.

mosquito

  • Full Member
  • ***
  • Posts: 141
Re: Concepto de Cámara con BGRABitmap
« Reply #2 on: December 30, 2020, 10:41:37 am »
[Lainz] gracias por su opinión, empezaré con este concepto.

circular

  • Hero Member
  • *****
  • Posts: 4217
    • Personal webpage
Re: Concepto de Cámara con BGRABitmap
« Reply #3 on: December 30, 2020, 08:18:18 pm »
Si las planetas se mueven respecto al background, ahora mejor tener una imagen de 250x250 y dibujar todo en cada ciclo.

Si quiere que sea muy rápido, se puede usar OpenGL con BGRABitmap.
Conscience is the debugger of the mind

lainz

  • Hero Member
  • *****
  • Posts: 4468
    • https://lainz.github.io/
Re: Concepto de Cámara con BGRABitmap
« Reply #4 on: December 30, 2020, 11:53:05 pm »
Gracias circular. Si es mejor OpenGL.

Creería que entonces no hace falta el tema de calcular si el objeto esta dentro de la cámara antes de dibujarlo?

mosquito

  • Full Member
  • ***
  • Posts: 141
Re: Concepto de Cámara con BGRABitmap
« Reply #5 on: December 31, 2020, 10:14:41 am »
Gracias por compartir vuestras ideas, son muy útiles.

Como les dije, el tema de la galaxia y los planetas es sólo un ejemplo.
Quiero entender la esencia del concepto de cámara para abandonar otros frameworks y  usar sólo pascal y BGRABitmap.

Por ejemplo en un engine clásico de una forma u otra (independientemente del lenguaje) esto suele ser algo así:

Code: Bash  [Select][+][-]
  1. FUNCTION UPDATE(
  2. IF KEY(A) PLAYER.X=PLAYER.X-V
  3. IF KEY(D) PLAYER.X=PLAYER.X+V
  4. )
  5.  
  6. FUNCTION DRAW(
  7. CLEARSCR()
  8. CAMERA(PLAYER.X,PLAYER.Y)
  9. )
  10.  

Ya tengo solucionados los eventos, matemáticas, colisiones, sprites , animaciones, sonido etc. Sólo me falta la CÁMARA !! (quizás tambien falte el gamepad)

En otras palabras,

*) Si el juego o aplicación ocurre en una ventana delimitada (breakout,pang,invaders) estoy listo. (incluso tengo un pequeño motor de partículas al 90% que funciona en BGRABitmap(CPU Y GPU) y Castle Game Engine con resultados muy buenos ).

*) Si el juego o aplicación ocurre en un mundo estoy en bragas (pinball,platformer,RTS,point&click,etc).

Necesito un concepto sólido que pueda ir mejorando hasta conseguir una cámara que pueda seguir objetivos,rotate,zoom,shake,etc.

lainz

  • Hero Member
  • *****
  • Posts: 4468
    • https://lainz.github.io/
Re: Concepto de Cámara con BGRABitmap
« Reply #6 on: December 31, 2020, 01:38:00 pm »
Empeza con el offset, y de ahi vas mejorando.

circular

  • Hero Member
  • *****
  • Posts: 4217
    • Personal webpage
Conscience is the debugger of the mind

 

TinyPortal © 2005-2018