2010-07-30 4 views
2

Je commence à traiter avec OpenGL. Mon application est écrite en Java en utilisant SWT comme système de fenêtrage.Dessin Opengl au centre de la fenêtre

En utilisant http://lwjgl.org/ et SWT, je suis capable d'utiliser OpenGL dans mon canevas SWT. J'ai écrit le code simple OpenGL suivant dans mon écouteur de peinture sur toile:

// clear to background color 
GL11.glClearColor(.3f, .5f, .8f, 1.0f); 
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); 

// draw rectangle 
GL11.glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 
GL11.glMatrixMode(GL11.GL_PROJECTION); 
GL11.glLoadIdentity(); 
GL11.glBegin(GL11.GL_POLYGON); 
GL11.glVertex3f(0.1f, 0.1f, 0.0f); 
GL11.glVertex3f(0.1f, 0.9f, 0.0f); 
GL11.glVertex3f(0.9f, 0.9f, 0.0f); 
GL11.glVertex3f(0.9f, 0.1f, 0.0f); 
GL11.glEnd(); 
GL11.glFlush(); 

Je veux savoir pour ajouter un écouteur de modification de taille sur ma toile afin d'avoir toujours mon rectangle dans le centre de la fenêtre. Comment devrais-je faire ça?

Répondre

4

Vous devez définir manuellement la taille de votre fenêtre en appelant le glViewport() à chaque modification de la taille du canevas. Après cela, votre écran aura les dimensions spécifiées par glOrtho().

En outre, vos matrices sont en désordre. La matrice de projection est utilisée pour la projection uniquement et la visualisation de modèle pour les autres transformations (rotation, mise à l'échelle, déplacement, etc.).

// Viewport (needs to be done on canvas resize only) 
GL11.glViewport(0.0, 0.0,     // Set viewport size 
       canvas.getBounds().width, 
       canvas.getBounds().height); 

// Projection (only needs to be set once in most cases) 
GL11.glMatrixMode(GL11.GL_PROJECTION);  // Select projection matrix 
GL11.glLoadIdentity();      // Clear it 
GL11.glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); // Set your projection 

// model/view transforms 
GL11.glMatrixMode(GL11.GL_MODELVIEW); // Select modelview matrix 
GL11.glLoadIdentity();     // Clear it 

// Draw (shortcut) 
GL11.glRectf(0.1f, 0.1f, 0.9f, 0.9f); 
Questions connexes