保持屏幕尺寸的几何形状不变

时间:2015-01-20 05:38:19

标签: c++ opengl graphics screen-resolution

我做了一些像这样的形状:

// Triangle
glBegin(GL_TRIANGLES);
    glVertex3f(0.0,0.0,0);
    glVertex3f(1.0,0.0,0);
    glVertex3f(0.5,1.0,0);
glEnd();

// Cube using GLUT
glColor3f(0.0,0.0,1.0);
glutSolidCube(.5);

// Circle
glPointSize(2);
glColor3f(1.0,0.0,1.0);
glBegin(GL_POINTS);

float radius = .75;

for( float theta = 0 ; theta < 360 ; theta+=.01 )
    glVertex3f( radius * cos(theta), radius * sin(theta), 0  );

glEnd();

最初我将窗口大小保持为500x500,输出如下所示:enter image description here

但是,如果我更改窗口小部件的宽度和高度(不是按比例),则形状会变形(圆形看起来是椭圆形,等边三角形看起来是等腰):enter image description here

这是小部件更新代码:

void DrawingSurface::resizeGL(int width, int height)
{ 
   // Update the drawable area in case the widget area changes
   glViewport(0, 0, (GLint)width, (GLint)height);
}

我知道我可以保持视口本身具有相同的宽度和高度,但是大量的空间会被浪费在边上。

Q值。对此有何解决方案?

Q值。游戏开发者如何处理这个问题,为不同的分辨率设计OpenGL游戏?

P.S。 :我确实理解这不是现代的OpenGL,还有更好的制作圈子的方法。

1 个答案:

答案 0 :(得分:3)

他们通过使用投影矩阵来解决它,透视矩阵和正投影传统上都有一种获得宽高比(宽度/高度)的方法,并使用它来调整屏幕上的结果。