¡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
}