12
votes

Dans OpenGL, comment puis-je régler pour la fenêtre à redimensionner?

Je dessine plusieurs formes (telles que des cercles) qui sont saisies de la hauteur et de la largeur de la fenêtre. Puisque la fenêtre commence toujours à une taille donnée, elles sont dessinées correctement, mais lorsque la fenêtre est redimensionnée, elle dégage le rapport de l'aspect vers le haut.

Comment puis-je dessiner correctement les formes, quelle que soit la taille de la fenêtre?


0 commentaires

5 Réponses :


5
votes

Si vous utilisez quelque chose comme glutant (), utilisez simplement le rapport de la largeur / hauteur de la fenêtre:

gluPerspective(60, (double)width/(double)height, 1, 256);


0 commentaires

18
votes

Vous ne voulez certainement pas que la taille de vos objets dépend explicitement de la taille de la fenêtre.

Comme déjà suggéré par Genpfault, ajustez votre matrice de projection chaque fois que la taille de la fenêtre change. P>

choses à faire sur la fenêtre Redimensionner: P>

  1. ajuster la fenêtre forte> p> XXX PRE> LI>

  2. ajuster le rectangle de ciseaux strong> (seulement si vous avez GL_SSISSOR_TEST code> activé) p> XXX PRE> LI>

  3. Ajustez la matrice de projection forte> p>

    En cas d'héritage (pipeline de fonction fixe) OpenGL, vous pouvez le faire les manières suivantes: p>

    gluOrtho2D(left * ratio, right * ratio, bottom, top)
    


1 commentaires

Le ciseaux influence également la zone redessinée, si vous avez une fois défini le clip recter en appelant glsissor () . Voir Ce .



3
votes

Vous devez configurer une sorte de fonction de gestionnaire de fenêtre appelée chaque fois que votre fenêtre OpenGL est redimensionnée. Vous devez prendre soin de l'affaire lorsque VÊTEMENTRATIO> 1, et lorsque LOPRATIO <= 1 séparément. Ne le faisant pas peut entraîner une géométrie chute d'un décréen après un redimensionnement de l'écran.

 XXX                                  

0 commentaires

0
votes

J'apprends opengl aussi. J'ai fait face à ce problème hier et je n'ai pas trouvé la bonne réponse. Aujourd'hui, j'ai résoudre le problème. Dans mon petit programme, l'objet change de taille lors de la redimensionnement de la largeur de la fenêtre ou de l'heigt. Ceci est mon code (s'il vous plaît, pardonnez mes erreurs): XXX


0 commentaires

0
votes

Il existe de nombreuses méthodes pour faire cela. Exemple suivant montre comment je le fais dans mes projets et son travail. L'exemple vous montre simplement une boîte rectangle qui ne change pas la taille de sa taille lorsque la fenêtre redimensionne. Vous pouvez directement copier et coller dans votre projet (considérez que je suis un débutant OpenGL)

#include<windows.h>
#include<glut.h>

GLfloat x1=100.0f;
GLfloat y1=150.0f;
GLsizei rsize = 50;

GLfloat xstep=1.0f;
GLfloat ystep=1.0f;

GLfloat windowWidth;
GLfloat windowHeight;


void scene(void){
   glClear(GL_COLOR_BUFFER_BIT);
   glColor3f(1.0f,0.0f,0.0f);

   glRectf(x1,y1,x1+rsize,y1-rsize);

   glutSwapBuffers();
}

void setupRc(void){

  glClearColor(0.0f,0.0f,1.0f,0.0f);

}

void changeSize(GLsizei w,GLsizei h){
  if(h==0)
  h=1;
  glViewport(0,0,w,h);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
   if(w>=h){
     windowWidth=250.0f*w/h;
     windowHeight=250.f;
   }
   else{
     windowWidth=250.0f;
     windowHeight=250.f*h/w;
   } 

   glOrtho(0.0f,windowWidth,0.0f,windowHeight,1.0f,-1.0f);


   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();


}




void main(void){

   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);

   glutCreateWindow("Rectangle");

   glutReshapeFunc(changeSize);
   glutDisplayFunc(scene);
   setupRc();

   glutMainLoop();

}


0 commentaires