C++ 在屏幕大小更改时保持几何体不变

C++ 在屏幕大小更改时保持几何体不变,c++,opengl,graphics,screen-resolution,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)

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

// 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();
我知道我可以保持视口本身具有相同的宽度和高度,但这样会在侧面浪费大量空间

有什么解决办法吗

游戏开发者通常如何处理这个问题,设计不同分辨率的OpenGL游戏


旁白:我知道这不是现代的OpenGL,还有更好的圆制作方法。

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

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

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

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

您能详细说明一下吗?或者一个类似的链接也就足够了。你能详细说明一下吗?或者一个类似的链接也就足够了。你能详细说明一下吗?或者一个类似的链接也就足够了。你能详细说明一下吗?或者一个类似的链接也就足够了。
void DrawingSurface::resizeGL(int width, int height)
{ 
   // Update the drawable area in case the widget area changes
   glViewport(0, 0, (GLint)width, (GLint)height);
}