Home Tutoriales Básicos CARGANDO UN ESCENARIO EN TU JUEGO EN 1ª PERSONA

Entradas Blogs

< Julio 2008 >
Lu Ma Mi Ju Vi Sa Do
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30      

Usuarios Conectados

Ninguno
CARGANDO UN ESCENARIO EN TU JUEGO EN 1ª PERSONA PDF Imprimir E-mail
Escenario 3D

Descargar fuentes (1.486MB)
Comentar Este tutorial en los foros

En este tutorial vamos a completar los aspectos básicos de la creación de un juego en primera persona mejorando también el movimiento del ejemplo anterior que ya hemos visto en la primera parte. En esta ocasión cogeremos el ejemplo de Terreno Avanzado que viene con los ejemplos de la Actualización 5.8 de DarkBASIC Profesional. Parte de este tutorial es igual al del segundo ejemplo de juego en 3ª persona ya que comparten trozos del mismo código.

En esta segunda parte aprenderemos a cargar un escenario por el cual podremos movernos con total libertad

 

CARGANDO EL ESCENARIO

Lo primero que debemos hacer es decirle a DarkBASIC Profesional que queremos cargar un escenario, en este caso el escenario de la demo Terreno Avanzado.

En este caso primero estableceremos un directorio por defecto “media” que será donde se encuentren todos los archivos necesarios para crear nuestro escenario.

SET DIR "media"

Ahora podremos cargar los gráficos facilitando simplemente sus nombres, sin la ruta relativa ya que hemos especificado que trabajaremos en el directorio “media”

LOAD IMAGE "texture.bmp",
LOAD IMAGE "detail.tga", 2

Una vez cargados estos archivos podremos dar las instrucciones para que DarkBASIC prepare el escenario:

MAKE OBJECT TERRAIN 1
SET TERRAIN HEIGHTMAP 1, "map.bmp"
SET TERRAIN SCALE 1, 60, 10, 60
SET TERRAIN SPLIT 1, 16
SET TERRAIN TILING 1, 4
SET TERRAIN LIGHT 1, 1, -0.25, 0, 1, 1, 0.78, 0.5
SET TERRAIN TEXTURE 1, 1, 2
BUILD TERRAIN 1

El comando MAKE OBJECT TERRAIN 1 establece que el terreno que vamos a crear se almacene como número de objeto 1

El comando SET TERRAIN HEIGHTMAP 1,”map.bmp” establece que el mapa de altura a partir del cual queremos que se cree nuestro escenario. En este caso será el archivo gráfico “map.bmp”

El comando SET TERRAIN SCALE 1,60,10,60 Crea las dimensiones de nuestro escenario. Es un comando muy importante ya que a través de el lograremos adecuar nuestro escenario a las dimensiones del resto de los objetos de nuestro juego. En este caso las dimensiones serán 60 de ancho, 10 de alto y 60 de largo.

Prueba a variar estos valores para crear escenarios de distintos tamaños!

El comando SET TERRAIN SPLIT establece en cuantas partes se dividirá nuestro escenario.

El comando SET TERRAIN TILING establece cuantos “tiles” baldosas, abarcará la textura al texturizar nuestro escenario.

Cambia el valor de este comando y observa como varía la apariencia el escenario y como le afecta a la cantidad de fotogramas por segundo!

El comando SET TERRAIN LIGHT establece las luces y sombras por defecto de nuestro escenario. Viene a representar la luz del sol y crea las sombras de acuerdo a los valores que le pasemos. El primer valor indica le número de luz, Los tres siguientes son la dirección de las coordenadas X.Y y Z los tres siguientes son los valores de color RGB de esa luz: ROJO, VERDE, AZUL y por último el valor de la intensidad de esa luz.

Prueba a variar todos los valores de luz para crear diferentes ambientes en el terreno: Diurno, nocturno, sombras intensas, suaves... u obtén ambientes alienígenas haciendo uso de los colores!

El comando SET TERRAIN TEXTURE establece las dos texturas de nuestro escenario, la textura base, de la cual cogemos el color y la textura de detalle la cual se mezclará con la textura base para crear la apariencia del terreno.

El comando BUILD TERRAIN Finalmente este comando crea el escenario según los datos que le acabamos de indicar.

Ahora que hemos creado el terreno del juego por el cual nos moveremos necesitamos cargar una skybox. Las skyboxes (cajas de cielo) son esferas texturizadas con un conjunto de imágenes que vistas desde dentro de ellas dan la sensación de estar viendo un cielo. Es la mejor manera de representar el cielo y se utiliza en todos los juegos hechos hoy en día.

LOAD OBJECT "skybox2.x", 200
SET OBJECT LIGHT 200, 0
SET OBJECT TEXTURE 200, 3, 1
POSITION OBJECT 200, 4000, 2000, 4000
SCALE OBJECT 200, 60000, 60000, 60000

LOAD OBJECT cargará el modelo de esfera que representa al cielo "skybox02.x"y lo almacena como número de objeto 200
SET OBJECT LIGHT provoca que el cielo no se vea afectado por las luces de nuestro escenario para conseguir mayor realismo.
SET OBJECT TEXTURE Establece como se representará la textura del cielo
POSITION OBJECT posiciona el modelo de manera correcta para englobar dentro de él a nuestro mundo 3D
SCALE OBJECT Redimensionas la esfera dándole valores enromes para que todo nuestro mundo 3D quedé situado dentro de ella.

Ya hemos cargado nuestro escenario y colocado una skybox. Pero para poder ver el escenario sin problemas aún deberemos hacer uso de un comando más.

SET CAMERA RANGE 0.5, 60000

El comando SET CAMERA RANGE le indica a DarkBASIC a partir de que distancia debe mostrar los objetos de pantalla y a partir de que distancia debe hacerlos desaparecer.

Sin duda conoceréis más de un juego donde los escenarios aparecían de golpe al acercarse a ciertos objetos. Esto era muy usual sobre todo en los juegos de coches ya que de esta manera al limitar la distancia a partir de la cual se representan los objetos logramos renderizar menos polígonos lo que mejora el rendimiento global de nuestro juego. Pero por contra provoca que el escenario se cree a partir de cierto punto creando un desagradable resultado...

Si sabemos diseñar bien nuestros escenarios podremos hacer uso de este comando para acelerar nuestros juegos sin provocar súbitas apariciones de nuestro escenario. Por ejemplo, basándonos en el escenario que acabamos de crear:

Mientras el jugador se mantenga en el suelo y rodeado de montañas podemos acortar sustancialmente el área de renderizado ya que el jugador solo verá las montañas que lo rodean, mientras que cuando escale alguna de las montañas deberíamos ampliar este área para que el jugador pueda ver todo el escenario.

Si no podemos escalar las montañas, que es lo más normal en los videojuegos, entonces tan solo deberíamos hacer la skybox mucho más pequeña para acercarla a nuestro escenario y que de esta manera entre en el área de renderizado.

Prueba a dar distintos valores a SET CAMERA RANGE y observa los cambios que provoca en el renderizado!

Para terminar, ya que hemos establecido un directorio por defecto lo “resetearemos” a su valor inicial dándole el valor “..”

SET DIR “..”

 

INTERACTUANDO CON EL TERRENO

Tan sólo nos queda hacer un pequeño cambio en el código para que podamos movernos con total libertad por el escenario que acabamos de crear

Deberemos conocer la altura del suelo en cada punto si queremos desplazarnos correctamente por el escenario de manera correspondiente al relieve del suelo. Para ello usaremos el siguiente comando:

AlturaTerreno# = get terrain ground height( 1, camera position x( ), camera position z( ) )

En la variable AlturaTerreno# almacenaremos el valor actual del relieve del terreno sobre el cual se encuentra nuestro personaje. Get terrain ground height el priemr parámetro indica el número de terreno, y los dos siguientes especifican la posición actual de la cámara, sus coordenadas X y Z.

Una vez hecho esto deberemos pasar este valor a la coordenada Y de la cámara, que es la que le indica a que altura debe situarse.

POSITION CAMERA CAMERA POSITION X( ), AlturaTerreno# + 3, CAMERA POSITION Z()

 

MEJORANDO EL CONTROL DE LA CÁMARA

Mejoraremos ahora el control de la cámara implementando el movimiento de la misma a través del ratón. De esta manera nos moveremos con los cursores según la dirección de la cámara que le demos usando el ratón tal y como funcionan todos los juegos actuales en primera persona.

Primero guardaremos el antiguo ángulo de la cámara usando las siguientes líneas:


ViejoAnguloCamaraY# = AnguloCamaraY#
ViejoAnguloCamaraX# = AnguloCamaraX#

Ahora recogeremos el ángulo actual de la cámara según el movimiento del ratón:


AnguloCamaraY# = wrapvalue ( AnguloCamaraY# + mousemovex ( ) * 0.4 )
AnguloCamaraX# = wrapvalue ( AnguloCamaraX# + mousemovey ( ) * 0.4 )

Por último rotaremos la cámara de manera suave utilizando como punto de partida el ángulo anterior y desplazándolo hasta la nueva posición. El movimiento de transición suave la conseguimos usando el comando CURVEANGLE, el primer parámetro indica la posición final, el segundo la posición actual y el último el valor de la velocidad de movimiento. El movimiento en el eje correcto lo conseguimos gracias a los comandos YROTATE CAMERA y XROTATE CAMERA utilizando uno u otro según el movimiento del eje del ratón:


YROTATE CAMERA CURVEANGLE ( AnguloCamaraY#, ViejoAnguloCamaraY#, 24 )
XROTATE CAMERA CURVEANGLE ( AnguloCamaraX#, ViejoAnguloCamaraX#, 24 )

 

Si te fijas, en el comienzo del código, verás que definimos dos variables llamadas g_fvelocidad y g_fgiro. Estos dos valores definirán la velocidad de desplazamiento y de giro de la cámara.


g_fVelocidad# = 0.05
g_fgiro# = 0.3

El siguiente comando ubicado dentro de la etiqueta DatosUsuario es el que provoca el movimiento

control camera using arrowkeys 0, g_fVelocidad#, g_fgiro#

También podremos variar la velocidad de movimiento durante el juego gracias a las siguientes líneas:

if inkey$ ( ) = "+"
if g_fVelocidad# < 1000
g_fVelocidad# = g_fVelocidad# + 0.01
endif
endif

if inkey$ ( ) = "-"
if g_fVelocidad# > 0.002
g_fVelocidad# = g_fVelocidad# - 0.001
endif
endif

Si pulsamos la tecla "+" aumentaremos la velocidad ya que velocidad es igual a velocidad + 0.0. Mientras que si pulsamos la tecla "-" la disminuiremos ya que velocidad es igual a velocidad -0.001

 

MOSTRANDO INFORMACIÓN EN PANTALLA

Veamos ahora como mostrar alguna información útil en pantalla. El siguiente comando mostrará los fotogramas por segundo a los que se refresca nuestro juego.

PRINT "fps = " + STR$ ( SCREEN FPS( ) )

Las siguientes líneas mostrarán en pantalla los valores de las coordenadas X, Y, Z de la cámara recogiéndolos de los comandos CAMERA POSITION X, Y y Z


PRINT "x = " + STR$ ( CAMERA POSITION X( ) )
PRINT "y = " + STR$ ( CAMERA POSITION Y( ) )
PRINT "z = " + STR$ ( CAMERA POSITION Z( ) )

Por último el siguiente comando mostrará la cantidad de polígonos que hay en pantalla en ese momento. Recuerda que a mayor número de polígonos más le costará a la tarjeta gráfica renderizarlos.


PRINT "Recuento de polígonos = " + STR$ ( STATISTIC ( 1 ) )

 

ESTRUCTURA DEL PROGRAMA

En este ejemplo verás que utilizamos comandos goto (Ir a) para saltar de una parte del programa a otro. En programas tan cortos como este no es relamente necesario pero cuando tengamos un juego lo suficientemente grande nos vendrá muy bien tener todo el código bien organizado.

Esto puede hacerse así o pueden usarse funciones. que tienen más posibilidades y son más comodas de usar, pero empezaremos por los comandos goto que son más sencillos de utilizar

gosub DatosUsuario
gosub Informacion

Estos dos comandos dentro del bucle principal harán que DarkBASIC salte hasta las etiquetas DatosUsuario e Información cada vez que llegue a esa línea. Es decir saltará a la líne 67 y 100 respectivamnte y una vez acabe volverá y continuará en el punto siguiente donde lo dejó.

Prueba a crear una nueva etiqueta coloca algunos comandos en su interior e invócala usando un nuevo comando goto!

 

TERMINANDO

Observa que antes del comando SYNC ahora tenemos un nuevo comando UPDATE TERRAIN. Este comando es el que actualiza los datos del escenario para mostrarlo correctamente en pantalla. Deberemos hacer uso de él antes de un SYNC siempre que usemos el Terreno Avanzado.

UPDATE TERRAIN

 

 

 

 

 
Banner
Darkbasic.es © 2005-2012 Sunshine Entertainment Software.
DarkBASIC Profesional © 2005-2008 The Game creators Limited. Todos los derechos reservados.
 

Login

Galería