Delphi

Solo disponible en BuenasTareas
  • Páginas : 7 (1717 palabras )
  • Descarga(s) : 9
  • Publicado : 12 de septiembre de 2009
Leer documento completo
Vista previa del texto
DAIE: Desenvolupament d’Aplicacions Informàtiques a l’Enginyeria EUETIB - UPC

Tutorial 5. Volando sobre el terreno
Al finalizar este tutorial se obtiene un programa que permite crear un terreno —un mapa en tres dimensiones— y volar sobre él moviéndonos a voluntad y con la posibilidad de mirar hacia cualquier lado. 1. 2. 3. 4. Creación de la tierra Creación del cielo Aprendiendo a volar Vistade águila

Copyright (c) 2005 Samir Kanaan. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections and no Back-Cover Texts. The most recent version of this document can be obtained from the following web address:http://webon.euetib.upc.es/samir/daie.html.

1. Creación de la tierra
El primer elemento en esta escena será el propio terreno, que como veremos utiliza un mapa de alturas para elevar montañas o quedarse en llanura. Para visualizar el terreno en nuestra escena, en primer lugar hay que crear una escena vacía, con una cámara con sus valores por defecto y conectada al visor. Una vez hecho eso, hay que añadira la escena un objeto de tipo terreno: SceneObjects>Add Objects>Mesh Objects>TerrainRenderer. De momento no se verá nada, aunque el editor de la escena debería aparecer así:

La representación de terreno en GLScene tiene algunas características que conviene conocer antes de seguir adelante: • Aunque en GLScene la x es horizontal, la y vertical y la z “sale de la pantalla”, el TerrainRenderer seextiende en el plano xy y las alturas se representan en z, luego hay que girar toda la escena para verla adecuadamente. • La representación del terreno se hace en tiempo de ejecución, así que mientras estamos editando la escena no veremos gran cosa (una superficie plana, como mucho). • Las alturas del terreno deben provenir de un control GLBitmapHDS, que se encuentra en la pestaña GLScene Utils.En este control cargaremos un mapa de bits que representará la altura (blanco altura máxima, negro mínima).

2

Ejemplo de mapa de alturas Por lo tanto, para que el terreno contenga alguna información y podamos empezar a trabajar, es necesario seguir los siguientes pasos: • Crear un control GLBitmapHDS. • Decirle al TerrainRenderer que tome la información de alturas del GLBitmapHDS mediantela propiedad HeightDataSource del TerrainRenderer. • Cargar, en el GLBitmapHDS, la imagen del mapa de alturas (adjunta con el programa de ejemplo) mediante su propiedad Picture. Aun así, seguiremos sin ver nada; sin embargo, si ejecutamos el programa, podremos ver algo como esto:

Aunque no lo parezca, estamos viendo ya el terreno, lo que pasa es que la cámara está en (0, 0, 0) y con direcciónz=-1, así que según lo que hemos explicado de la situación del terreno (en el plano xy), para conseguir una vista hacia el horizonte hay que hacer dos cosas: elevar la cámara, que ahora significa aumentar la z de la cámara por ejemplo hasta 10; por otra parte, hay que hacer que la cámara no

3

mire hacia abajo como ahora, sino hacia delante, luego su dirección debería ser, por ejemplo y=1. Lanueva vista es la siguiente:

que, la verdad, no parece mucho mejor que antes. El problema es que estamos justo detrás de una montaña, y por eso lo vemos casi todo negro. Se trata de un problema de escala: la propiedad Scale del TerrainRenderer controla las dimensiones del terreno en cada eje; no nos interesa que sea tan alto como ancho, luego conviene aumentar la extensión y disminuir laaltura, por ejemplo poniendo (4, 4, 0,25). De esta forma ya queda más claro que estamos tras una montaña:

Ahora que ya estamos más o menos bien situados, vamos a intentar cambiar el color del terreno, pues si vemos todo en negro es porque no hay ninguna luz y estamos viendo sólo la silueta de las montañas. Esto se puede resolver de dos maneras: añadiendo una luz, o bien asociando una textura al...
tracking img