L'Aspect Ratio d'Étirement en OpenGL
Je vais avoir quelques problèmes avec le mode plein écran. Je peux mettre ma fenêtre pour être en 800x600, mais quand j'ai plein écran de cette résolution, il s'étend. Je suppose que c'est en raison d'un changement dans l'aspect ratio. Comment puis-je résoudre ce problème?
Edit #1
Voici une capture d'écran de ce que je vois se produire.
Gauche: 800x600
Droite: 1366x768
Edit #2
Mon initGraphics fonction est appelée à chaque fois que je re-taille de la fenêtre (WM_SIZE).
void initGraphics(int width, int height) {
float aspect = (float)width /(float)height;
glViewport(0, 0, width, height);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND); //Enable alpha blending
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glClearColor(0.0, 0.0, 0.0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, width, height * aspect, 0.0);
glMatrixMode(GL_MODELVIEW);
}
- Quel est votre matrice de projection ressembler?
Vous devez vous connecter pour publier un commentaire.
SOLUTION:
Le vrai problème a fini par être que vous avez été de détourner le gluOrtho2D fonction. Au lieu d'utiliser ce:
Vous avez besoin pour passer à la forme correcte de ce:
Ce dernier crée un 2D projection orthographique, qui remplit toute la largeur et la hauteur de votre fenêtre, de sorte qu'aucun étirement se produit.
RÉPONSE ORIGINALE À CETTE QUESTION:
Vous avez besoin de modifier votre projection afin de prendre en compte le nouveau ratio d'aspect.
Assurez-vous tout d'abord définir
glViewport
à la nouvelle taille de la fenêtre. Après la fenêtre d'affichage est défini, vous aurez besoin de changer votre mode de matrice de projection avec un appel àglMatrixMode
et enfin calculer votre nouveau ratio d'aspect avecwidth /height
et passer le nouveau ratio d'aspect degluPerspective
. Vous pouvez également utiliser directementglFrustum
au lieu degluPerspective
vous pouvez trouver la source degluPerspective
pour obtenir le même effet avecglFrustum
.Quelque chose comme ceci:
glLoadIdentity()
ou de la matrice de projection peut appliquer les perspectives sur le dessus les uns des autresAprès le redimensionnement de la fenêtre, vous avez besoin d'ajuster votre matrice de projection afin de refléter le nouveau ratio d'aspect. Si vous utilisez classique OpenGL, basculer le mode matrice de GL_PROJECTION, la charge de la matrice d'identité, puis d'appeler glOrtho ou gluPerspective avec la dimension verticale à l'échelle par le rapport d'aspect (en supposant que vous voulez la diffusion horizontale de l'image à ce qu'elle était à la fenêtre d'origine).