Qt + OpenGL 教程(四):点、线、三角形、四边形、多边形

由前面2篇文章,我们可以知道,只需要在paintGL()函数中修改即可。

void Widget::paintGL()//对OpenGL进行所有的设置。设置清除屏幕所用的颜色,打开深度缓存,启用smooth shading.等窗口创建之后才会被调用
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清除屏幕和深度缓存
    glLoadIdentity();//重置当前的模型观察矩阵。在glLoadIdentity()调用之后,函数返回之前,添加代码来创建基本的形
    //目前所做的就是将屏幕清除成前面所决定的颜色,清除深度缓存并且重置场景,仍然没绘制任何东西。
    //glPolygonMode(GL_FRONT_AND_BACK ,GL_LINE );//前后面,填充方式(点point、线line、FILL)
    glTranslatef(-1.5,  0.0, -6.0 );//移动的时候不是相对于屏幕中心移动,而是相对于当前所在屏幕位置
    int M = 2;
    int N = 2;
    float **Zn = (float **)new float *[N];
    for(int i=0;i<N;i++)
    {
        Zn[i] = new float[M];
    }
    glBegin(GL_POINTS);//点
        glVertex3f(-0.5,-0.5,0);
        glVertex3f(0.5,1,0);
        glVertex3f(1,-0.5,0);
        glVertex3f(-1,1,0);
    glEnd();
    glTranslatef(2.5,  0.0, -6.0 );
    glBegin(GL_LINES);//线
        glVertex3f(-1,-1,0);
        glVertex3f(1,1,0);
        glVertex3f(1,-1,0);
        glVertex3f(-1,1,0);
    glEnd();
    glTranslatef(-4.5,  -4.0, -6.0 );
    glBegin(GL_TRIANGLES);//三角形
        glVertex3f(-1,-1,0);
        glVertex3f(1,1,0);
        glVertex3f(1,-1,0);
        glVertex3f(-1,1,0);//
    glEnd();
    glTranslatef(2.5,  0.0, -6.0 );
    glBegin(GL_QUADS);//四边形。如果点的顺序不按某一顺序的话,存在两点之间的连线有交叉的话,出来的形状就不对。
        glVertex3f(-1,1,0);
        glVertex3f(1,1,0);
        glVertex3f(1,-1,0);
        glVertex3f(-1,-1,0);
    glEnd();
    glTranslatef(4.5,  0.0, -6.0 );
    glBegin(GL_POLYGON);//多边形。如果点的顺序不按某一顺序的话,存在两点之间的连线有交叉的话,出来的形状就不对。
        glVertex3f(-0.5,1,0);
        glVertex3f(0.5,1,0);
        glVertex3f(1,0,0);
        glVertex3f(0.5,-1,0);
        glVertex3f(-0.5,-1,0);
        glVertex3f(-1,0,0);
    glEnd();
   
}

 

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页