文章目录
- 一、前置知识
- 二、运行效果
- 三、关键代码
一、前置知识
通过上一节的学习:OPenGL笔记–创建一个OPenGL窗口,我们已经知道了怎么创建一个OPenGL窗口了,接下来学习如果在OPenGL窗口中绘制多边形。
首先我们先了解一下OPenGL中的坐标系:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SO2cjN4MWN5YjY2MWNykjMzYzXwMDMzATMwIzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
- OPenGL中的坐标系如上图所示,X坐标轴从左至右、Y坐标轴从下至上、Z坐标轴从里至外;
- OPenGL屏幕中心的坐标值是X和Y轴上的0.0点,一般调用
就会将当前点移到屏幕中心;glLoadIdentity()
- 使用
沿着X,Y和Z轴移动,并不是相对于屏幕中心移动,而是相对于当前所在的屏幕位置移动;glTranslatef(x, y, z)
- 使用
参数绘制三角形、GL_TRIANGLES
参数绘制正方形、GL_QUADS
参数绘制多边形;GL_POLYGON
二、运行效果
三、关键代码
void GL_Test::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除屏幕和深度缓存
glLoadIdentity(); //重置当前的模型观察矩阵
glTranslatef(-1.5, 0.0, -6.0);
//开始绘制三角形
//-----------------------------------------
glBegin(GL_TRIANGLES); //开始绘制三角形
glVertex3f(0.0, 1.0, 0.0); //上顶点
glVertex3f(-1.0, -1.0, 0.0); //左下顶点
glVertex3f(1.0, -1.0, 0.0); //右下顶点
glEnd(); //告诉OPenGL三角形已经创建好了
//-----------------------------------------
//绘制三角形结束
//开始绘制正方形
//-----------------------------------------
glTranslatef(3.0, 0.0, 0.0);
glBegin(GL_QUADS); //开始绘制正方形
glVertex3f(-1.0, 1.0, 0.0); //左上顶点
glVertex3f(1.0, 1.0, 0.0); //右上顶点
glVertex3f(1.0, -1.0, 0.0); //右下顶点
glVertex3f(-1.0, -1.0, 0.0); //左下顶点
glEnd(); //告诉OPenGL正方形已经创建好了
//-----------------------------------------
//绘制正方形结束
}
- 使用
之后,当前点就移动到了屏幕中心;glLoadIdentity()
- 使用
,X轴左移了1.5个单位,Y轴不动,Z轴内移6.0个单位glTranslatef(-1.5, 0.0, -6.0)
- 使用
标志着开始绘制三角形、使用glBegin(GL_TRIANGLES)
标志着绘制结束;glEnd()
- 绘制三角形,开始-结束内部可以放置三个坐标点;
- 绘制正方形,开始-结束内部可以放置四个坐标点;
- 绘制多边形(GL_POLYGON),不在乎开始-结束内部有多少个点;
- 使用
提供坐标点,内部的x、y和z是相对于当前点的偏移点;glVertex3f(x, y, z)
- 顺时针绘制的正方形意味着我们所看见的,是四边形的背面;