openGL分辨率设置,屏幕行为无法解释
Posted
技术标签:
【中文标题】openGL分辨率设置,屏幕行为无法解释【英文标题】:openGL resolution settings, screen behaving unexplainably 【发布时间】:2012-03-21 03:48:19 【问题描述】:所以我一直在尝试让分辨率设置在我的游戏中正常工作一段时间,但无济于事。我有一个 16:9 的比例,我试图保持不变。我将 SDL 与 openGL 一起使用。这是我不断变化的分辨率类:
#ifndef _RESOLUTION_CPP_
#define _RESOLUTION_CPP_
#include "Main.h"
class Resolution
public:
static void ChangeResolution(SDL_Surface* Screen,int Width,int Height, bool FullScreen)
int Full = 0;
if(FullScreen)
Full = SDL_FULLSCREEN;
Screen = SDL_SetVideoMode(Width , Height, 32, SDL_HWSURFACE | SDL_GL_DOUBLEBUFFER | SDL_OPENGL| Full);
glClearColor(0, 0, 0, 0);
glClearDepth(1.0f);
glViewport(0, 0, Width, Height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//glOrtho(0, Width, Height, 0, 1, -1);
glOrtho(0, 960,540, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
glLoadIdentity();
;
#endif
现在,起初我将 glOrtho 设置为与窗口大小和视口一起缩放,但随着窗口大小变大,这让我看到了更多屏幕,这不是我想要的。因此,通过设置相机(glOrtho 就像相机对吗?)设置为恒定的宽度和高度,我能够始终看到屏幕的相同部分。到目前为止一切顺利。
现在在窗口模式下尝试游戏,一切正常。游戏的图形缩放,保持纵横比,我总是看到屏幕的同一部分。
现在尝试在 5:4 显示器上全屏显示,这就是我得到的结果:
左:960x540--- 中:1024x576--- 右:1200x675
如您所见,只有中间的那个在正常工作,它被拉伸以填满屏幕,但没有被拉伸以破坏纵横比。左边的那个是保持它的纵横比,但缩放不够。
右边的那个被垂直拉伸了,纵横比被打破了。这是为什么?为什么会被拉成这样?
另外,我将如何使屏幕居中,以便在中间显示器上,顶部和底部是一个黑色空间,而不仅仅是顶部的一个大空间?
附加信息:
当我在 16:10 的笔记本电脑上尝试此操作时,我得到了类似的结果,即屏幕缩放不足或未居中,但从未拉伸。甚至将其设置为 1920,1080 的巨大分辨率。它比屏幕更精确,所以我只能看到一小部分,但我猜你不能在更小的分辨率上真正压缩 1920x1080。
所以我的问题是:为什么分辨率的事情是完全不可预测的?有时它会拉伸,有时它不能扩展,等等。我该如何解决这个问题?
【问题讨论】:
也许this SO question 会有所帮助。 您是否考虑过将代码放在实际帖子中,而不是放在其他网站上? 【参考方案1】:glOrtho(0, 960,540, 0, 1, -1);
参数可以是 (GLfloat)width/(GLfloat)height 的倍数,这样比例就会与视口匹配
【讨论】:
以上是关于openGL分辨率设置,屏幕行为无法解释的主要内容,如果未能解决你的问题,请参考以下文章