天天看點

openGL簡單畫圖(C++/GLUT)畫同心圓、折線

計算機圖形學快結課了,這裡整理一下我學習的時候的代碼。

void init(void) {
	//背景設定為白色
	glClearColor(1.0, 1.0, 1.0, 0.0);

	//正投影
	glMatrixMode(GL_PROJECTION);
	gluOrtho2D(-200.0, 200.0, -150.0, 150.0);
}

void myDisplay(void)

{
	
	//顯示視窗
	glClear(GL_COLOR_BUFFER_BIT);

	//設定顔色
	glColor3f(1.0, 0.5, 0.4);

	//設定線的粗細
	glLineWidth(4.0f);

#pragma region 折線
	//畫折線
	glBegin(GL_LINE_STRIP);
	glVertex2i(-20, -20);
    glVertex2i(-82, -82);
	glVertex2i(-92, -75);
	glVertex2i(-30, -15);
	glEnd();
#pragma endregion
 
#pragma region 同心圓
	//畫同心圓
	float pi = 3.1415926536;
	int i = 0;
	int n = 1000;
	glBegin(GL_POLYGON);//圓1
	for (i = 0; i < n; i++)
	{
		glVertex2f(50 * cos(2 * pi * i / n), 50 * sin(2 * pi * i / n));
	}
	glEnd();

	glBegin(GL_POLYGON);//圓2
	glColor3f(1.0, 1.0, 1.0);
	for (i = 0; i < n; i++)
	{
		glVertex2f(40 * cos(2 * pi * i / n), 40 * sin(2 * pi * i / n));
	}
	glEnd();

	glBegin(GL_POLYGON);//圓3
	glColor3f(1.0, 0.5, 0.4);
	for (i = 0; i < n; i++)
	{
		glVertex2f(30 * cos(2 * pi * i / n), 30 * sin(2 * pi * i / n));
	}
	glEnd();

	glBegin(GL_POLYGON);//圓4
	glColor3f(1.0, 1.0, 1.0);
	for (i = 0; i < n; i++)
	{
		glVertex2f(20 * cos(2 * pi * i / n), 20 * sin(2 * pi * i / n));
	}
	glEnd();

	glBegin(GL_POLYGON);//圓5
	glColor3f(1.0, 0.5, 0.4);
	for (i = 0; i < n; i++)
	{
		glVertex2f(10 * cos(2 * pi * i / n), 10 * sin(2 * pi * i / n));
	}
	glEnd();

#pragma endregion
	
	//保證前面的OpenGL指令立即執行(而不是讓它們在緩沖區中等待)
	glFlush();

}

//帶指令行參數的main函數
int main(int argc, char *argv[])

{
	glutInit(&argc, argv);

	glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);

	glutInitWindowPosition(100, 100);

	glutInitWindowSize(400, 400);   

	glutCreateWindow("OpenGL畫一個棒棒糖程式");

	init();
	glutDisplayFunc(&myDisplay);

	glutMainLoop();

	return 0;

}
           
openGL簡單畫圖(C++/GLUT)畫同心圓、折線

繼續閱讀