openGL入门(二)用openGL绘制带有对角线的正六边形

配置好openGL的环境之后我们就可以进行简单的绘图工作了,我的第一个绘图任务是通过点之间的连线绘制带有特定对角线的正六边形。

前人工作

在绘制正六边形之前找了一些绘制线、多边形的教程,以及画正n边形的教程,列举如下:

  1. 绘制简单的点、线、面:https://blog.csdn.net/Nick_Wang94/article/details/51946702
  2. 通过圆切割的方式画正n边形:http://blog.sina.com.cn/s/blog_622bd1660100y0m7.html
  3. 通过多个三角形拼接画正n边形:https://blog.csdn.net/th_gsb/article/details/51140842

进入正题

由于我的任务是通过坐标点的连线来绘制正六边形,因此需要先确定好点的坐标。openGL默认的坐标边界为±1,即窗口的四个顶点为(-1,1),(1,1),(1,-1),(-1,-1)。因此需要根据这四个顶点再借助几何知识计算出正六边形所有顶点的坐标如下:

//6个点的坐标
glVertex2f(-0.2, -0.35); 
glVertex2f(-0.4, 0.0); 
glVertex2f(-0.2, 0.35);
glVertex2f(0.2, 0.35);              
glVertex2f(0.4, 0.0);
glVertex2f(0.2, -0.35);

接下来,利用下面这个函数画多边形

glBegin(GL_POLYGON);

利用下面的这个函数画对角线即可

    glBegin(GL_LINES);

代码

#include 

//画带对角线的正六边形

void draw()
{
	glClearColor(0.0, 0.0, 0.0, 0.0);
	glClear(GL_COLOR_BUFFER_BIT);
	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);//只画出边框,不填充内部

	//画正六边形
	glBegin(GL_POLYGON);
	glVertex2f(-0.2, -0.35); 
	glVertex2f(-0.4, 0.0); 
	glVertex2f(-0.2, 0.35);
	glVertex2f(0.2, 0.35);              
	glVertex2f(0.4, 0.0);
	glVertex2f(0.2, -0.35);
	glEnd();

	//画线
	glBegin(GL_LINES);
	glVertex2f(-0.2, -0.35);
	glVertex2f(0.2, 0.35);

	glVertex2f(-0.2, 0.35);
	glVertex2f(0.2, -0.35);
	glEnd();

	
	glFlush();
}

void reshape(int x, int y)
{
	int dis = x > y ? y : x; //取小的
	glViewport(0, 0, dis, dis);
}

void main()
{
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
	glutInitWindowPosition(0, 0);
	glutInitWindowSize(500, 500);
	glutCreateWindow("绘制带对角线的正六边形");
	glutDisplayFunc(draw);
	glutReshapeFunc(reshape);
	glutMainLoop();
}

 

你可能感兴趣的:(OpenGL)