Puerto de Visión

Definición.
El puerto de visión es el área de la ventana grafica 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.

Instrucciones para la definición de la cámara virtual y sus parámetros.

void reshape(int width, int height) {

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(left,right, bottom, top, near, far);

  OR

  gluPerspective(view_angle, aspect_ratio, near, far);
  glMatrixMode(GL_MODELVIEW);

  glLoadIdentity();
  gluLookAt(eye.x,eye.y,eye.z, at.x,at.y, at.z,up.x, up.y,up.z);

}

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 innstruccion de glut: glutWireCube. La posicion
de la camara vitual es x = 0, y = 8, z = -15, su
orientacion (el punto al que la camara mira) esta 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 instruccion gluPerspective, asigna a la camara
virtual una lente con un angulo de vision (apertura)
de 90 grados, una aspectacion (relacion del ancho sobre
el alto de la ventana) de 640/480 y un volumen de vision
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.




No hay comentarios:

Publicar un comentario