¡Ayuda c++ y Open gl :) !

Iniciado por V_Dan, 20 Enero 2013, 04:20 AM

0 Miembros y 1 Visitante están viendo este tema.

V_Dan

¡Hola!
Tengo una pequeña duda con los viewports, es decir ¿Cómo hago para que cuando agrande la pantalla no se me distorsione mi figura, es decir que guarde proporción con mi ventana?
Se que se puede hacer cambiando el Ortho o los Viewports.
y otra duda
¿Cómo hago para manejar dos viewports ?
Es decir tengo mi figura en un pedazo de la pantalla y haciendole selección con el mouse , me muestra como un zoom de este pedazo de mi figura.

Agradezco si pudieran explicarme los Viewports

Muchas Gracias


//Dejo un código que permite mantener proporción con la ventana, pido rectificación :)

#include <windows.h> //Para poder usar ventanas con windows.
#include <GL/glut.h>
#include <stdio.h>
#include <iostream>

using namespace std;

//variables
float x,y,anchoview = 512,altoview = 512,cx=0,cy=0;

void init(void){ //Esto inicializa los colores
    glClearColor(0.0,0.0,0.0,0.0);
     glMatrixMode(GL_PROJECTION);   
     glOrtho(-250.0,250.0,-250.0,250.0,-1500,1500);   
}

void display (void){ //inicializamos parametros y creamos figuras

   glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //Mostrar la pantalla con el color
   glColor3f (0.0, 1.0, 0.0);//Color de nuestros objetos

      glutWireCube(490);
   
   glutSwapBuffers();

   
}

//void ControlRaton(int button,int state,int x,int y) {
   //if
void nuevapan (int nuevoancho, int nuevoalto){

   
   if(nuevoancho>(nuevoalto*2)){
      glViewport(((nuevoancho/2)-(nuevoancho+nuevoalto)/32),((nuevoalto/2)-(nuevoancho+nuevoalto)/32),(nuevoancho+nuevoalto)/16,(nuevoancho+nuevoalto)/16);
   }
   else {
   glViewport(((nuevoancho/2)-(nuevoancho+nuevoalto)/6),((nuevoalto/2)-(nuevoancho+nuevoalto)/6),(nuevoancho+nuevoalto)/3,(nuevoancho+nuevoalto)/3);
   //primero centramos el viewport al divir toda la dimension de la pantalla (x o y) en 2, luego le restamos un valor para correrlo hacia - x y bajarlo a - y estos valores son el nuevo viewport completo, pero divifido en algo para no sobre pasarlo
   }

   

}


int main (int argc, char** argv){

   glutInit(&argc, argv);//inicializa GLUT, encargada de genrar la pantalla
   glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); //da los parámetros que glut usara para generar su pantalla
   glutInitWindowSize(512, 512);//Tamaño de la pantalla a crear
   glutInitWindowPosition(20, 20);//Posicion inciial de la pantalla
   glutCreateWindow("Cuadrícula");//Generacióny nombre de la pantalla
   glutDisplayFunc(display);//Define el contenido de nuestra pantalla, o sea la imagen a crear con la funcion display
   //glutMouseFunc(ControlRaton);
   glutReshapeFunc(nuevapan);
   init();
   glutMainLoop(); //bucle infinito para el programa, es para esperar por eventos del telcado o el mause (si hay presion y luego se ejecuta), para usar eventos, primero debemos registrarlos 
   
   
}