Unidad III.- Puerto de vision en OpenGL


Definicion.

El puerto de vision es el area de la ventana grafica en la que se colocan las fotografias de la camara virtual. Normalmente el puerto de vision coincide con toda el area de la ventana grafica, pero es posible tener varios puertos de vison en una sola ventana.

Instrucciones para la definicion de la camara virtual y sus parametros.

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 posicion como la orientacion de la camara se
especifican en la instruccion 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