Я сделал некоторые формы, как это:Сохранение геометрии нетронутыми на изменение размера экрана
// 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
и выход, как показано:
Однако, если я изменить ширину и высоту (не пропорционально) мой виджет, форма искажается (круг выглядит овал, равносторонний треугольник выглядит равнобедренный):
Это код обновления виджета:
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. Любое решение для этого?
В. Как разработчики игр справляются с этим в целом, разрабатывая игру OpenGL для разных разрешений?
P.S. : Я понимаю, что это не современный OpenGL, а также лучшие способы создания круга.
Не могли бы вы немного рассказать об этом? Или будет достаточно ссылки на нечто подобное. –