Как я могу убедиться, что окно вывода либо фиксировано, либо круговой вывод в окне не меняет форму каждый раз, когда я максимизирую / минимизирую окно в OpenGL. Я использую c ++ в Visual Studio 2019 (имеется в виду, что были установлены зависимости glew и glut.) Я пытаюсь создать круг, используя алгоритм рисования средней точки (радиус 5 см, координаты начальной точки (0,3)) и проверяю, что он вращается на 90 градусов потом.
Обратите внимание, что на скриншоте показана окружность, изменившая овальную форму после сворачивания окна. Ссылка на скриншот ...
Код:
#include <Windows.h>
#include <GL\glew.h>
#include <GL\freeglut.h>
#include <iostream>
using namespace std;
int xForRotation = 000;
int yForRotation = 120;
int rFlag;
double theta = 0.0;
void myinit(void)
{
glClearColor(1, 1, 1, 0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glutInitWindowSize(1000,1000);
gluOrtho2D(-1*640.0, 640.0, -1*640.0, 640.0);
glMatrixMode(GL_MODELVIEW);
}
void circleMidPoint()
{
int xCenter = 000;
int yCenter = 240; //3cm
int radius = 400; //5cm
int x = 0;
int y = radius;
int p = 1 - radius;//5/4 is rounded to 1 for integer radius
while (x < y) {// iterates to draw the first sector
x++;
if (p < 0)// the mid point is inside the circle
p += 2 * x + 1;
else {// the mid point is outside or at the circle
y--;
p += 2 * (x - y) + 1;
}
glBegin(GL_POINTS);
glVertex2i(xCenter + x, yCenter + y);
glVertex2i(xCenter - x, yCenter + y);
glVertex2i(xCenter + x, yCenter - y);
glVertex2i(xCenter - x, yCenter - y);
glVertex2i(xCenter + y, yCenter + x);
glVertex2i(xCenter - y, yCenter + x);
glVertex2i(xCenter + y, yCenter - x);
glVertex2i(xCenter - y, yCenter - x);
glEnd();
}
// OPTIONAL:-> center of the circle
glBegin(GL_POINTS);
glVertex2i(xCenter, yCenter);
glEnd();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT); // clear the screen
glColor3f(1.0, 0.0, 0.0); // red foreground
glPointSize(5.0);// size of points to be drawin (in pixel)
//establish a coordinate system for the image
circleMidPoint();
glFlush(); // send all output to the display
glLoadIdentity();
if (rFlag == 1) //Rotate the circle around fixed point
{
yForRotation;
xForRotation;
theta = 0.25;
}
glTranslatef(xForRotation, yForRotation, 0.0);
glRotatef(theta, 0.0, 0.0, 1.0);
glTranslatef(-xForRotation, -yForRotation, 0.0);
glutPostRedisplay();
glutSwapBuffers();
}
void rotateMenu(int option){
if (option == 1)
rFlag = 1;
}
int main(int argc, char** argv){
glutInit(&argc, argv);
glutInitWindowSize(640, 480); // set the size of the window
glutInitWindowPosition(10, 10); // the position of the top-left of window
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutCreateWindow("Midpoint Circle Drawing Algorithm. *Right CLick to Rotate");
myinit();
glutDisplayFunc(display); // set the gl display callback function
glutCreateMenu(rotateMenu);
glutAddMenuEntry("Rotate Circle", 1);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMainLoop(); // enter the GL event loop
}