INTEGRANTES:

Roberto Uribe Paredes:

Ciro albornoz P.:

 
 
Introducción
El curso de computación gráfica entrega los conceptos que nos permiten entender la forma en que se ha ido evolucionando el mundo de la computación gráfica. Consideramos apropiado el proyecto tetris 3-D ya que permite desarrollar todos los conceptos que el curso abarca y nos da una base teórica fuerte para enfrentar futuros desafíos.
 
 
Objetivos

El objetivo principal es crear una aplicación donde utilizar la mayoría de las herramientas matemáticas gráficas entregadas en clases. En este caso el tetris 3D.
 
 

Resultados del Proyecto

El proyecto tuvo como resultado un algoritmo que se aproxima al juego real y que permitió la aplicación de gran parte de la materia vista en el curso, esto es:

Se considera como un proyecto exitoso ya que se cumplió el objetivo planteado.
Evolución del Proyecto

La evolución del proyecto se puede dividir en tres etapas principales:

Primera etapa: Incluye la definición de las estructuras, su implementación, y la aplicación de Transformaciones y proyecciones.

Segunda etapa: En esta se agregan los siguientes puntos:

Tercera etapa: Esta consta de lo siguiente:
 
 

El Juego

Se define un área en forma de caja (paralelepípedo de base cuadrada).

Se tienen distintas figuras geométricas 3D (formadas por la unión de bloques) las que van cayendo una a una dentro de la caja.

El jugador tiene la posibilidad de mover el objeto de modo de ubicarlo en la posición que más le convenga.

Los movimientos posibles para el jugador son traslación y rotación.

El objetivo del juego es mantener el cajón lo mas vacío posible, para ello se van eliminando parte de los objetos cada vez que se llena una capa en el fondo del cajón.
 
 

Programación

El lenguaje utilizado para la implementación del juego es:

Borland C++ V. 3.0.

La plataforma utilizada: DOS.

Uso de memoria: Memoria baja.

El sentido de esta elección es la utilización de herramientas de bajo nivel, pero esto tuvo una consecuencia, la cual es, se debió hacer un esfuerzo por disminuir el uso de la memoria.

Estructuras utilizadas

A continuación se muestra las estructuras finales que se utilizaron para el desarrollo del juego.

typedef double tj; 

 
typedef struct{

tj x;

tj y;

tj z;

tj h; /*coordenada homogena*/

}punto3d;

typedef struct{

punto3d a;

punto3d b;

int color; /*color*/

}linea3d;

typedef struct{

linea3d l[12]; /*12 lineas*/

punto3d p[NPUNTOS]; /*8 puntos*/ unsigned int presente; /*indica si existe el cubo en esa pos.*/ }cubo3d;
typedef struct{

cubo3d fig[MAXX][MAXY]; /*2 dim. para 

figuras simples y 3 dimensiones

para figuras complejas*/ punto3d eje; /*de rotacion*/ }figura;

 
typedef struct{

short int presente;

short int x;

short int y;

short int z;

}cajaaux;

 
 
 

Descripción de las estructuras

ESTRUCTURA
DESCRIPCION
tj
Tipo juego, tipo de dato de las coordenadas, cualquiera que se decida usar.
punto3d
Estructura de un punto en coordenadas homogéneas.
linea3d
Está compuesta por dos puntos y un campo parta el color
cubo3d
Esta formado por 12 líneas, 8 puntos y un campo que indica si está presente.
figura
Estructura que define una figura del juego, se compone de un arreglo de cubos que pueden elegirse bidimensional o tridimensional, posee además un campo que indica el eje bajo el cual se hará la rotación.
cajaaux
cajaaux, es una struct que guarda las posiciones de los distintos cubos del objeto en movimiento dentro del espacio de juego, permite determinar los movimientos no validos, por ejemplo: fuera del cajón o el choque con alguna figura ya existente. Es mucho mas liviana que la estructura figura ya que está compuesta sólo de 4 enteros cortos.

 
 
 
 
 
 
 

Algoritmo

El algoritmo consiste en los siguientes pasos:

 
Principales Obstáculos del Proyecto

Los primeros obstáculos presentados en el desarrollo del proyecto fueron los de definiciones de estructuras, aplicación de proyecciones y la representación del mundo 3·D, estos problemas se debieron principalmente a la poca claridad de los conceptos en un comienzo, pero se fueron solucionando en la medida que se avanzaba en la materia y que se iba adquiriendo mas manejo de las herramientas matemáticas necesarias.

Limitaciones de memoria: Uno de los problemas surgidos fueron las limitaciones de memoria que se presentan al trabajar en DOS y hacer uso de la memoria baja.

Solución: Un gran esfuerzo por disminuir el uso de la memoria, se puede citar los siguientes:

Uso de estructuras representativas de las estructuras reales y mucho más livianas lo que permitía el manejo de estas durante el algoritmo y la traducción hacia las estructuras reales en el momento de utilizarlas. por ejemplo, el uso de cajaaux para realizar las operaciones sobre la figura en forma mas eficiente.

Se evita redibujar la pantalla completa y se evita redibujar el cajón.

Grabar pantalla: cuando se calculaban las coordenadas algunas daban valores negativos lo que hacía que se cayera abruptamente la aplicación.

Solución: Cálculo de validación de las coordenadas, es decir, se debió determinar si no se desbordaba, recordemos que el algoritmo no trabaja con las coordenadas reales y una rotación podría eventualmente traducirse en coordenadas no válidas esto se solucionó en la versión 7.

Superficies Ocultas: Uno de los problemas más serios se presentaba al meter un cubo en un hueco, o sea debajo de una figura que ya existe.

Solución: Por el método del pintor, se pintan las orillas y luego las superficies más próximas al usuario. (en este caso significan las posiciones mas bajas en el eje Z, el eje Z definido positivo hacia el fondo de la pantalla). cabe señalar que este algoritmo se encuentra implícito en el hecho que para dibujar una figura sobre otra simplemente se sobre escriben los pixeles que esta ocupa.

Algunos Detalles no Solucionados

Cuando se ha producido una barrera visual para un cubo que cae en una posición más baja pero que no tiene ningún cubo arriba el algiritmo lo dibuja, pero parte de este cubo no debería verse. Ver figura


 
 
 
 

Detalle de las contribuciones individuales. Las contribuciones principales, sin considerar discusiones par la solución de problemas, reuniones y acuerdos fueron las siguientes:
 
Alumno Contribución
Roberto Uribe Desarrollo completo del Algoritmo. 
Ciro Albornoz Desarrollo del sitio Web y presentaciones.

 

Link para bajar el código fuente e instrucciones

Para la compilación de los códigos fuentes se requiere de Borlan C++ versión para DOS y para su ejecución debe estar presente el archivo egavga.bgi en el mismo directorio:

Los archivos fuente de la versión final están acá:

final.zip

/**************
Inserto (del 13/Octubre/2000) :

        t3d11.exe                    Ultima actualizacion (del 23 de Junio del 2000)
        t3d11-2.exe               El mismo juego con otra vista
        t312.exe                       Fijate que pasa al pulsar F12  (obviamente esto solo para jugar, podria haber quedado mejor :) )

        Recuerda :
                                Traslaciones : Flechas Izq., Der., Arriba y Abajo
                                Rotaciones   :   teclas  q, w y e
                                Hacia Abajo:   Barra Espaciadora

***************/

Imágenes del juego
 
 

Ilustración 1: Comienza el Juego
 
 
 
 
 
 
 

Ilustración 2: El Juego en plena función
 
 
 
 
 
 

Ilustración 3 : Juego desde vista Externa al cajón
 

Página principal
Principal