miércoles, 18 de septiembre de 2013

2.5 VENTANA Y PUERTO DE VISIÓN.

El puerto de visión es el área de la ventana gráfica en la que se colocan las fotografías de la cámara virtual. Normalmente el puerto de visión coincide con toda el área de la ventana gráfica, pero es posible tener varios puertos de visión en una sola ventana. 

Puerto de visión (Viewport).

Es el área de la ventana gráfica en la que se colocan las fotografías de la cámara virtual. Normalmente el ìertp de visión coincide con toda el área de la ventana gráfica, pero es posible tener varios puertos de visión en una sola ventana.
Se utiliza la función: 

void glViewport(GLint x, GLint y, GLsizei w, GLsizei h)

Dónde:

(x,y) es la esquina inferior izquierda del rectángulo o viewport. 

Esta coordenada debe especificarse con relación a la esquina inferior izquierda de la ventana. Claro está que w, h son la anchura y altura de nuestro viewport dentro de la ventana. Todos los valores son enteros ya que se tratan de pixels. 

Ventanas.

Para lograr un efecto de visualización particular en un programa de aplicación, podríamos diseñar nuestra propia ventana de recorte con cualquier forma, tamaño y orientación que queramos. Sin embargo, las aristas de ventanas más simples para recortar son las líneas rectas que son paralelas a los ejes de coordenadas. Por lo tanto, los paquetes gráficos habitualmente sólo permiten ventanas de recorte rectangulares alineadas con los ejes x e y. Para crear una ventana se usan estos comandos de la librería GLUT:

glutlnit (&argc, argv);
glutlnitWindowPosition (xTopLeft, yTopLeft);
glutlnitWindowSize (dwWidth, dwHeight) ;
glutCreateWindow ("Title of Display Window");




Ejemplo.

/*Dibujar un cubo en perspectiva*/
#include"stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <GL/GLAUX.H>
#include <GL/GLU.H>
#include <GL/GL.H>
#include <GL/glut.h>
void init(void) {
glClearColor(1.0, 1.0, 1.0, 0.0);
glPointSize(15.0);
}

/*El cubo se despliega en hilos de alambre con
la instrucción de glut: glutWireCube. La posición
de la cámara virtual es x = 0, y = 8, z = -15, su
orientación (el punto al que la cámara mira) está dado
por un vector que pasa por (0, 0, 0)y por (0, 8, -15).
Tanto la posición como la orientación de la cámara se
especifican en la instrucción gluLookAt*/ 

void display(void) {
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0, 8, -15, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glRotated(30, 1, 0, 0);
glColor3f(1.0f, 0.0f, 0.0f);
glutSolidCube(12);
glColor3f(0.0f, 0.0f, 0.0f);
glutWireCube(12);
glFlush();
}

/*La instrucción gluPerspective, asigna a la cámara
virtual una lente con un ángulo de visión (apertura)
de 90 grados, una expectación (relación del ancho sobre
el alto de la ventana) de 640/480 y un volumen de visión
que se extiende por 11 unidades (de -1.0 a 10.0)*/

void reshape(int x, int h) {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90, 640/480, -1, 10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(640, 480);
glutCreateWindow("Cubo en perspectiva");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
init();
glutMainLoop();
}

Vista previa.



Conclusión: 

En este tema vemos con el puerto visión nos facilita el manejo de alguna imagen a través de ventanas. Y con las ventanas en un programa de aplicación, podemos hacer diferentes cosas.

Bibliografía:

http://graficacionitca3d.blogspot.mx/2012/03/24-transformacion-ventana-area-de-vista.html

http://garciaoscar10110795.blogspot.mx/p/unidad-iii.html

http://cruzpinedabenjamingraf.blogspot.mx/

http://ortiz-aangelica.blogspot.mx/2013/04/investigacion.html

No hay comentarios:

Publicar un comentario