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分辨率设置,屏幕行为无法解释的主要内容,如果未能解决你的问题,请参考以下文章

显示器最大分辨率有黑边 无法铺满屏幕

unity android<opengl 3.3> 怎么改

WIN10平板如何录制视频,为什么录制屏幕无法播放

OpenGL 纹理不适用于大于 1x1 的分辨率

opengl窗口超过分辨率

Kivy:解决行为