#include<windows.h>
#include<gl/glut.h>
#define PI 3.141415926
#include<math.h>
void Display(void);
void Poloygon(void);
void Reshape(int w,int h);
int main(int argc,char* argv[]){
glutInit(&argc,argv);//初始化GLUT
glutInitDisplayMode(GLUT_SINGLE| GLUT_RGB);//显示模式:双缓冲、RGBA
glutInitWindowSize(1024,600); //设置窗口
glutInitWindowPosition(400,400);
glutCreateWindow("Car");
glutDisplayFunc(Display);
glutMainLoop();//调用传递指令给GLUT现在开始它的内部循环
glClearColor(0.75f,0.75f,0.75f,0.5f);
return 0;
}
void Display()
{
glClear(GL_COLOR_BUFFER_BIT);//清空帧缓存
glColor3f(1.0f,1.0f,0.0f);
glBegin(GL_POLYGON);
int n = 3600;
float R = 0.1f;
for(int i = 0;i<n;i++){
glVertex2f(cos(2*PI/n*i)*R+0.1,sin(2*PI/n*i)*R+0.1);
}
glEnd();
glFlush();
}在这里插入代码片
反复检查后,发现代码是没有错误的,但是明明是圆的代码,为什么会生成椭圆呢?或者,换种说法,生成的其实是一个圆,但是因为被压缩了,所以,看起来是一个椭圆。
glutInitWindowSize(1024,600);
原来是在设置窗口大小时,设置的是一个长方形的窗口,就导致图形被“压扁了”
(其实这里应该是窗口和视口变换的问题,但是我现在还不会……,就暂时把它设置为正方形的,后面再说)
这样就能得到圆了,但把窗口放大后,又变成了椭圆,所以,窗口和视口的变换还是很重要的。
以上纯属瞎猜,有大佬看见了别骂我,hhhhh