Class Objeto3D

java.lang.Object
  |
  +--Objeto3D

public class Objeto3D
extends java.lang.Object

Modelos tridimensionales del edificio y plano del suelo. El algoritmo de análisis de modelos 3D implementado en esta clase está basado en código de libre distribución: Daeron Meyer 1995. The Geometry Center, University of Minnesota. Se puede encontrar mayor información sobre ficheros "OFF" y librerías gráficas orientadas al objeto en la siguiente URL: http://www.geom.umn.edu/software/geomview/docs/oogltour.html


Field Summary
private  Coordenadas coordsLight
           
(package private)  Face[] face
           
(package private)  int[] findex
           
(package private)  boolean gothead
           
(package private)  java.awt.Color[] gr
           
(package private)  Matrix3D mat
           
(package private)  int MAX_VERTS
           
private  int mult
           
(package private)  int nedges
           
(package private)  int nfaces
           
(package private)  int nverts
           
(package private)  boolean transformed
           
(package private)  int transparencia
           
(package private)  int[] tvert
           
(package private)  float[] vert
           
(package private)  int[] vx
           
(package private)  int[] vy
           
(package private)  int[] vz
           
 float xmax
           
 float xmin
           
 float ymax
           
 float ymin
           
 float zmax
           
 float zmin
           
 
Constructor Summary
(package private) Objeto3D()
          Crea un objeto 3D "vacío".
(package private) Objeto3D(java.io.BufferedReader reader)
          Crea un objeto 3D leyendo su descripción geométrica desde el "reader" dado.
(package private) Objeto3D(java.io.InputStream input)
          Crea un objeto 3D leyendo su descripción geométrica desde el "stream" dado.
(package private) Objeto3D(java.net.URL loc)
          Crea un objeto 3D leyendo su descripción geométrica desde la URL dada.
 
Method Summary
(package private)  void analizarModelo(java.io.StreamTokenizer stream)
          Analiza la descripción del modelo 3D para generar su geometría.
private  double dot(Coordenadas coords1, Coordenadas coords2)
          Calcula el efecto de sombreado en función de la orientación de la cara y el foco lumninoso.
(package private)  void findBB()
          Calcula los límites exteriores del modelo 3D.
private  Coordenadas getCentroid(int[] vx, int[] vy, int[] vz, int nverts)
          Calcula el centroide de una cara,
 double getCentroide()
          Determina la distancia media del observador al centroide global del objeto 3D.
private  Coordenadas getLine(Coordenadas coords1, Coordenadas coords2)
          Calcula el vector que une el foco luminoso y el centroide de una cara.
private  Coordenadas getNormal(int[] vx, int[] vy, int[] vz, int nverts)
          Calcula la recta normal a una cara.
(package private)  void paint(java.awt.Graphics g)
          Muestra el objeto 3D en pantalla.
(package private)  void qs(int left, int right)
          Algoritmo rápido de clasificación para ordenar las caras en función de su distancia z al observador.
(package private)  void transform()
          Transforma todos los puntos del modelo para poder representarlo en pantalla.
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

face

Face[] face

transformed

boolean transformed

gothead

boolean gothead

mat

Matrix3D mat

xmin

public float xmin

xmax

public float xmax

ymin

public float ymin

ymax

public float ymax

zmin

public float zmin

zmax

public float zmax

vert

float[] vert

nverts

int nverts

nfaces

int nfaces

nedges

int nedges

vx

int[] vx

vy

int[] vy

vz

int[] vz

tvert

int[] tvert

findex

int[] findex

transparencia

int transparencia

gr

java.awt.Color[] gr

MAX_VERTS

final int MAX_VERTS

mult

private int mult

coordsLight

private Coordenadas coordsLight
Constructor Detail

Objeto3D

Objeto3D()
Crea un objeto 3D "vacío".

Objeto3D

Objeto3D(java.net.URL loc)
Crea un objeto 3D leyendo su descripción geométrica desde la URL dada.
Parameters:
loc - URL donde se encuentra la descripción geométrica del objeto 3D.

Objeto3D

Objeto3D(java.io.InputStream input)
Crea un objeto 3D leyendo su descripción geométrica desde el "stream" dado.
Parameters:
input - Inputstream que describe la geometría del objeto 3D.

Objeto3D

Objeto3D(java.io.BufferedReader reader)
Crea un objeto 3D leyendo su descripción geométrica desde el "reader" dado.
Parameters:
input - BufferedReader que describe la geometría del objeto 3D.
Method Detail

analizarModelo

void analizarModelo(java.io.StreamTokenizer stream)
              throws java.io.IOException
Analiza la descripción del modelo 3D para generar su geometría.
Parameters:
stream - StreamTokenizer que contiene la descripción geométrica del modelo 3D.

transform

void transform()
Transforma todos los puntos del modelo para poder representarlo en pantalla.

qs

void qs(int left,
        int right)
Algoritmo rápido de clasificación para ordenar las caras en función de su distancia z al observador.

getCentroid

private Coordenadas getCentroid(int[] vx,
                                int[] vy,
                                int[] vz,
                                int nverts)
Calcula el centroide de una cara,
Parameters:
vx - Array de coordenadas X de la cara.
vy - Array de coordenadas Y de la cara.
vz - Array de coordenadas Z de la cara.
nverts - Número de vértices de la cara.
Returns:
Coordenadas del centroide.

getNormal

private Coordenadas getNormal(int[] vx,
                              int[] vy,
                              int[] vz,
                              int nverts)
Calcula la recta normal a una cara.
Parameters:
vx - Array de coordenadas X de la cara.
vy - Array de coordenadas Y de la cara.
vz - Array de coordenadas Z de la cara.
nverts - Número de vértices de la cara.
Returns:
Coordenadas que definen la recta buscada.

getLine

private Coordenadas getLine(Coordenadas coords1,
                            Coordenadas coords2)
Calcula el vector que une el foco luminoso y el centroide de una cara.
Parameters:
coords1 - Coordenadas del centroide de la cara.
coords2 - Coordenadas del foco luminoso.
Returns:
Coordenadas qued efinen el vector buscado.

dot

private double dot(Coordenadas coords1,
                   Coordenadas coords2)
Calcula el efecto de sombreado en función de la orientación de la cara y el foco lumninoso.
Parameters:
coords1 - Normal al plano de la cara.
coords2 - Recta que conecta el foco luminoso y el centroide de la cara.
Returns:
Factor de variación de color para simular sombreado.

paint

void paint(java.awt.Graphics g)
Muestra el objeto 3D en pantalla. Calcula la distancia de cada cara al observador y utiliza este valor para ordenarlas. Las caras más cercanas se dibujan las últimas, superpuestas a las más alejadas para obtener el efecto 3D deseado. Este procedimiento se denomina "algoritmo del pintor" pero en determinadas posiciones de superficies contiguas no siempre proporciona un orden correcto.

findBB

void findBB()
Calcula los límites exteriores del modelo 3D.

getCentroide

public double getCentroide()
Determina la distancia media del observador al centroide global del objeto 3D. Se utiliza para mostrar correctamente el suelo y el edificio (el que esté más cercano en primer plano).