天天看点

OPenGL笔记--创建一个多边形

文章目录

  • ​​一、前置知识​​
  • ​​二、运行效果​​
  • ​​三、关键代码​​

一、前置知识

通过上一节的学习:​​OPenGL笔记–创建一个OPenGL窗口​​,我们已经知道了怎么创建一个OPenGL窗口了,接下来学习如果在OPenGL窗口中绘制多边形。

首先我们先了解一下OPenGL中的坐标系:

OPenGL笔记--创建一个多边形
  • OPenGL中的坐标系如上图所示,X坐标轴从左至右、Y坐标轴从下至上、Z坐标轴从里至外;
  • OPenGL屏幕中心的坐标值是X和Y轴上的0.0点,一般调用​

    ​glLoadIdentity()​

    ​就会将当前点移到屏幕中心;
  • 使用​

    ​glTranslatef(x, y, z)​

    ​沿着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()​

    ​之后,当前点就移动到了屏幕中心;
  • 使用​

    ​glTranslatef(-1.5, 0.0, -6.0)​

    ​,X轴左移了1.5个单位,Y轴不动,Z轴内移6.0个单位
  • 使用​

    ​glBegin(GL_TRIANGLES)​

    ​​标志着开始绘制三角形、使用​

    ​glEnd()​

    ​标志着绘制结束;
  • 绘制三角形,开始-结束内部可以放置三个坐标点;
  • 绘制正方形,开始-结束内部可以放置四个坐标点;
  • 绘制多边形(GL_POLYGON),不在乎开始-结束内部有多少个点;
  • 使用​

    ​glVertex3f(x, y, z)​

    ​提供坐标点,内部的x、y和z是相对于当前点的偏移点;
  • 顺时针绘制的正方形意味着我们所看见的,是四边形的背面;