openGL分辨率设置,屏幕表现无法解释

时间:2012-03-21 03:48:19

标签: c++ opengl screen-resolution

所以我一直试图让分辨率设置在我的游戏中正常工作一段时间无济于事。我有一个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显示器上全屏显示,这就是我得到的:

enter image description here

左:960x540 --- 中东:1024x576 --- 右:1200x675

正如您所看到的,只有中间的那个正在工作,它被拉伸以填满屏幕,但没有拉伸以破坏纵横比。左边的那个是保持它的纵横比,但不够缩放。

右边的一个是垂直拉伸,纵横比被打破。这是为什么?为什么会这样伸展?

另外,我如何围绕屏幕居中,以便在中间显示器上,顶部和底部是黑色空间,而不是顶部的一个大空间?

其他信息:

当我在16:10笔记本电脑上尝试这个时,我得到了类似的结果,屏幕没有足够缩放或没有居中,但它从未拉伸。甚至将其设置为1920,1080的巨大分辨率。它比屏幕更精确地缩放,所以我只看到一小部分,但我猜你不能真正在一个小得多的分辨率上挤压1920x1080。

所以我的问题是:为什么解决方案的事情完全不可预测?有时它会延伸,有时它不够伸缩等等。我该如何解决?

1 个答案:

答案 0 :(得分:0)

glOrtho(0, 960,540, 0, 1, -1);

参数可以多个(GLfloat)宽度/(GLfloat)高度,以便比例与视口匹配