martes, 24 de septiembre de 2013

Puerto visión

Definicion.

El puerto de vision es el area de la ventana gráfica en la que se colocan las fotografias de la camara 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.
 

 

Setting Up the Camera

To apply camera transformations to your scene you can use the following function:
void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez,
GLdouble atx,GLdouble aty,GLdouble atz,
GLdouble upx,GLdouble upy,GLdouble upz)
Here is a picture depicting the parameters of that function:
 
 
 
 

 
 
 
 
 
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