3.1 REPRESENTACION DE OBJETOS EN TRES DIMENSIONES.
La representación de los
objetos en tres dimensiones sobre una superficie plana, de manera que ofrezcan
una sensación de volumen se llama Perspectiva. Se representan los objetos sobre
tres ejes XYZ. En el eje Z, se representa la altura. En el eje Y, se representa
la anchura y en el eje X, se representa la longitud.
Los distintos tipos de
perspectivas dependen de la inclinación de los planos Los sistema más
utilizados son la isométrica, la caballera y la cónica. Estudiaremos en este
curso las dos primeras.
Perspectiva Isométrica. En
ella los ejes quedan separados por un mismo ángulo (120º). Las medidas siempre
se refieren a los tres ejes que tienen su origen en un único punto.
Perspectiva Caballera. En
ella los ejes X y Z tienen un ángulo de 90º y el eje Y con respecto a Z tiene
una inclinación de 135º. En este caso las medidas en los ejes X y Z son las
reales y las del eje Y tiene un coeficiente de reducción de 0.5
Dibujar en
perspectiva
En ambas perspectivas, el
sistema más sencillo es llevar las tres vistas principales sobre los planos
formados por los ejes:
Alzado en el plano XZ.
Planta en el plano XY.
Perfil en el plano YZ.
Cada una de las aristas que
forman las vistas se prolonga paralelamente al eje que corresponda:
Horizontal paralelo al eje
de las X.
Vertical paralelo al eje de
las Z.
Profundidad paralelo al eje
de las Y.
Transformaciones
en OpenGL
En algunos tutoriales
anteriores de OpenGL se han mencionado de manera fragmentaria los conceptos de
transformaciones:
En los “Hola Mundo 3d en
OpenGL” y “Hola Complicado Mundo OpenGL-win32” se utilizaron algunas
transformaciones de proyección y viewport para ajustar la inicialización de la
ventana, pero sin entrar mucho en detalle acerca de su funcionamiento.
· Proyección:
Trasforman una escena 3d “abstracta”, en una imagen plana que puede ser
visualizada en una pantalla.
· Viewport:
Ajustan el producto de la proyección a las dimensiones de un rectángulo
contenedor (ventana).
· De vista: Que definen y afectan la posición desde la
cual se visualizan las escenas tridimensionales.
· Modelado: Sirven para manipular los objetos en la
escena, permitiendo trasladarlos, rotarlos y deformarlos (escalarlos).
· Modelo-Vista: Son la combinación de las dos
transformaciones anteriores, que desde un punto de vista práctico son
semejantes.
· Void
glMatrixMode (enum mode); Permite seleccionar la matriz sobre la cual
se realizaran las operaciones, los posibles valores de mode son TEXTURE,
MODELVIEW, COLOR o PROJECTION. Por ahora las más interesantes son MODELVIEW y
PROJECTION, las otras se verán en su momento.
· Void glLoadMatrix {fd} (T m [16]); Recibe una matriz
de 4×4 que reemplaza la actual seleccionada. El arreglo es ordenado en forma de
una matriz que tiene orden Y, a diferencia de las matrices convencionales que
tienen orden X, lo que quiere decir que tiene la forma.
· Void glMultMatrix {fd} (T m [16]); Multiplica la
matriz actual por la matriz m [16] y reemplaza la matriz actual con el
resultado de la operación. La operación resultante sería algo así como A’ = A
M, donde A es la matriz actual, M es la matriz suministrada y A’ es la nueva
matriz que resulta de la operación y que reemplaza a A.
· Void
glLoadTransposeMatrix {fd} (T m [16]); Realiza una función similar
a LoadMatrix(), con la diferencia que trabaja sobre una matriz en orden X así.
· Void glMultTransposeMatrix {fd}(T m[16] ); Misma
funcionalidad que MultMatrix() , solo que actúa en base a la matriz en orden X,
o sea la transpuesta.
· Void
glLoadIdentity (void); Remplaza la matriz actual por la matriz
identidad de tamaño 4×4.
Estas operaciones afectan
directamente las matrices mencionadas anteriormente, debido a que las
operaciones de “alto nivel” (trasladar, rotar, escalar) que existen más
adelante se concatenan, es decir su efecto se acumula sobre matriz actual,
existen dos operaciones que permiten guardar la matriz actual en una pila y
restaurarla cuando sea necesario, estas son:
· Void
glPopMatrix (void); Saca el elemento superior de la pila, que
pasa a reemplazar a la matriz actual.
Estas dos operaciones son
muy utilizadas, debido a que permiten realizar transformaciones sobre objetos
diferentes, manteniendo algunas de las anteriores sin modificar.
Proyección
Como ya se ha visto en tutoriales anteriores, OpenGL maneja 2 tipos de proyección, en perspectiva y ortográfica, donde la primera corresponde a la visión “realista” de la escena, mientras que la segunda es una “plana” que no deforma las dimensiones de los objetos dependiendo de su distancia a la cámara.
Ortográfica: Para ajustar la
proyección ortográfica se utiliza el siguiente grupo de funciones:
GlOrtho (GLdouble left, GLdouble right, GLdouble
bottom, GLdouble top, GLdouble near, GLdouble far);
gluOrtho2D (GLdouble left, GLdouble right, GLdouble
bottom, GLdouble top);
Perspectiva:
Existen dos manera de manejar la proyección en perspectiva, a través de una
función Gl o mediante la librería glu (una tercera puede ser realizar los
cálculos de la matriz “manualmente”. En el primer caso:
GlFrustrum (GLdouble left, GLdouble right, GLdouble
bottom, GLdouble top, GLdouble near, GLdouble far).
Transformaciones
ModelView.
Una tarea muy común en la
creación de gráficos 2d, 3d y videojuegos es la de mover objetos para crear
cierta animación. La primera idea que se nos viene a la cabeza en el caso de OpenGL
es que todo modelo está formado por primitivas, toda primitiva por puntos y
finalmente todo punto por una tripleta de coordenadas XYZ, así que si se
cambian las coordenadas todo de ahí hacia arriba se mueve.
Void glRotate [fd](GLfloat angle, GLfloat x, GLfloat
y, GLfloat z);
Hay que tener en cuenta las
siguientes características a la hora de utilizar estas funciones:
· Estas tres operaciones
afectan la matriz actual seleccionada, bien sea MODELVIEW o PROJECTION,
generalmente para propósitos de rotar objetos dentro de la escena se utiliza la
matriz MODELVIEW.
· El eje coordenado de
referencia para las operaciones tanto en MODELVIEW como en PROJECTION se
denomina “eye coordinates”, que traduce coordenadas de “ojo” o mejor “vista”.
Este es un sistema inamovible y en ausencia de cualquier transformación, la
“cámara” está situada en (0,0,0) apuntando hacia la dirección Z negativa, con
el vector “arriba” en el sentido Y positivo.
· Cada operación que afecta
la matriz MODELVIEW crea otro sistema coordenado para los objetos que se
dibujen después de realizada la trasformación, dicho sistema difiere del
“básico”, es decir de las llamadas coordenadas de vista (eye coordinates)
dependiendo de todo el conjunto de transformaciones realizadas desde el momento
en que la matriz MODELVIEW dejo de ser la identidad.
· Una consecuencia de lo
anterior es que las operaciones no son conmutativas, es decir que un llamado de
glRotate (), seguido de uno de glTranslatef () produce un efecto diferente a
llamar las operaciones en orden inverso. Esto se ve mejor ilustrado en el
gráfico:
· Es importante aprender a
utilizar correctamente glPushMatrix(), glPopMatrix() y otras operaciones que
permitan salvar y restaurar estados de matriz, debido a que permiten realizar
translaciones y rotaciones específicas para un cierto objeto, sin alterar los
otros.
Hardware.
En realidad, el API de ogl
está pensado para trabajar bajo el respaldo de un hardware capaz de realizar
las operaciones necesarias para el rende rizado, pero si no se dispone de ese
hardware, estas operaciones se calcularan por medio de un software contra la
CPU del sistema. Así que los requerimientos hardware son escasos, aunque cuanto
mayor sea las capacidades de la máquina, mayor será el rendimiento de las
aplicaciones ogl.
Windows.
En principio, cualquier
versión de Windows viene con las librerías necesarias para ejecutar cualquier
aplicación que utilice OpenGL. Para el desarrollo de las mismas, el Microsoft
Visual Studio, y en particular Visual C++ trae también todo lo necesario.
Puedes conseguir, además, la última versión de la GLUT en la web de Nate
Robins.
Coordenadas
oculares.
Las coordenadas oculares se
sitúan en el punto de vista del observador, sin importar las transformaciones
que tengan lugar. Por tanto, estas coordenadas representan un sistema virtual
de coordenadas fijo usado como marco de referencia común.
Transformaciones
Las transformaciones son las
que hacen posible la proyección de coordenadas 3D sobre superficies 2D. También
son las encargadas de mover, rotar y escalar objetos.
El modelador
En esta sección se recogen
las transformaciones del observador y del modelado puesto que, como se verá en
el apartado, constituyen, al fin y al cabo, la misma transformación.
Transformaciones
del observador
La transformación del
observador es la primera que se aplica a la escena, y se usa para determinar el
punto más ventajoso de la escena. Por defecto, el punto de vista está en el
origen (0,0,0) mirando en dirección negativa del eje z. La transformación del
observador permite colocar y apuntar la cámara donde y hacia donde se quiera.
Transformaciones
del modelo
Estas transformaciones se
usan para situar, rotar y escalar los objetos de la escena. La apariencia final
de los objetos depende en gran medida del orden con el que se hayan aplicado
las transformaciones.
Transformaciones
de la proyección
La transformación de
proyección se aplica a la orientación final del modelador. Esta proyección
define el volumen de visualización y establece los planos de trabajo. Los dos
tipos de proyección más utilizados son la ortográfica y la perspectiva, que
veremos más adelante.
Transformaciones
de la vista
En el momento en que se ha
terminado todo el proceso de transformaciones, solo queda un último paso:
proyectar lo que hemos dibujado en 3D al 2D de la pantalla, en la ventana en la
que estamos trabajando.
Matrices
Las matemáticas que hay tras
estas transformaciones se simplifican gracias a las matrices. Cada una de las
transformaciones de las que se acaba de hablar puede conseguirse multiplicando
una matriz que contenga los vértices por una matriz que describa la
transformación.
El canal de
transformaciones
Para poder llevar a cabo
todas las transformaciones de las que se acaba de hablar, deben modificarse dos
matrices: la matriz del Modelador y la matriz de Proyección.
La matriz del
modelador
La matriz del modelador es
una matriz 4x4 que representa el sistema de coordenadas transformado que se
está usando para colocar y orientar los objetos.
CONCLUSION:
Los gráficos tridimensionales son aquellos que, como
su nombre lo dice, tienen 3 dimensiones, altura, anchura y profundidad. Estos
se representan en el espacio a través de 3 ejes, X, Y y Z.
Están compuestos por un conjunto de puntos y líneas
tanto rectas como curvas que pueden ser modeladas a través de un alambrado para
objetos más complejos.
Los gráficos para poder ser vistos se deben
renderizar, esto consiste en pasar un objeto 3D en un gráfico en 2D en el que
se puede visualizar desde diferentes perspectivas. También se pueden agregar
sombras, brillos, difuminados, texturas entre otros.
Existen diferentes tipos de proyecciones, que permiten
visualizar el objeto de maneras diferentes, ya sea proyección en paralelo,
ortogonal, oblicua o de perspectiva.
Además, los objetos pueden ser transformados desde su
forma original, y, al igual que los objetos bidimensionales, pueden ser
trasladados, escalados y rotados, pero en este último, la rotación varia ya que
se puede rotar respecto al eje X , Y o Z.
También pueden ser deformados, es decir, alterar su
estructura mediante Twisting, Typering o con Deformaciones de Caja.
BIBLIOGRAFIA:
No hay comentarios:
Publicar un comentario