天天看点

OPenGL笔记--创建三维图形(立方体)

文章目录

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

一、前置知识

通过之前的学习,我们已经知道了如何创建多边形,立方体实际就是多边形围起来的三维图形,例如:

  • 椎体是4个三角形围起来的三维图形;
  • 正方体是6个正方形围起来的三维图形;

注意事项:

  • 要让您的对象绕自身的轴旋转,您必须让对象的中心坐标总是( 0.0, 0,0, 0,0 );
  • 在绘制时多边形时,要么都逆时针,要么都顺时针,但永远不要将两种次序混在一起;
  • 在绘制三角形时,开始-结束中有多余的点,OPenGL会理解为要绘制新的三角形,不会绘制成多边形;

二、运行效果

三、具体代码

void GL_Test::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除屏幕和深度缓存

    //-----------------------------------------
    glLoadIdentity();   //重置当前的模型观察矩阵

    glTranslatef(-1.5, 0.0, -6.0);

    glRotatef(rTri, 0.0, 1.0, 0.0); //绕Y轴旋转rTri度

    //开始绘制三角形
    glBegin(GL_TRIANGLES);

    //前侧面
    glColor3f(1.0, 0.0, 0.0);
    glVertex3f(0.0, 1.0, 0.0);      //上顶点
    glColor3f(0.0, 1.0, 0.0);
    glVertex3f(-1.0, -1.0, 1.0);    //左下顶点
    glColor3f(0.0, 0.0, 1.0);
    glVertex3f(1.0, -1.0, 1.0);     //右下顶点

    //右侧面
    glColor3f(1.0, 0.0, 0.0);
    glVertex3f(0.0, 1.0, 0.0);      //上顶点
    glColor3f(0.0, 0.0, 1.0);
    glVertex3f(1.0, -1.0, 1.0);     //左下顶点
    glColor3f(0.0, 1.0, 0.0);
    glVertex3f(1.0, -1.0, -1.0);    //右下顶点

    //后侧面
    glColor3f(1.0, 0.0, 0.0);
    glVertex3f(0.0, 1.0, 0.0);      //上顶点
    glColor3f(0.0, 1.0, 0.0);
    glVertex3f(1.0, -1.0, -1.0);    //左下顶点
    glColor3f(0.0, 0.0, 1.0);
    glVertex3f(-1.0, -1.0, -1.0);   //右下顶点

    //左侧面
    glColor3f(1.0, 0.0, 0.0);
    glVertex3f(0.0, 1.0, 0.0);      //上顶点
    glColor3f(0.0, 0.0, 1.0);
    glVertex3f(-1.0, -1.0, -1.0);   //左下顶点
    glColor3f(0.0, 1.0, 0.0);
    glVertex3f(-1.0, -1.0, 1.0);    //右下顶点

    glEnd();
    //绘制三角形结束

    //-----------------------------------------
    glLoadIdentity();   //重置当前的模型观察矩阵

    glTranslatef(-1.5, 0.0, -7.0);    //越远的对象看起来越小

    glRotatef(rQuad, 1.0, 1.0, 0.0);    //绕X轴旋转rQuad度

    //开始绘制正方形
    glTranslatef(3.0, 0.0, 0.0);

    glBegin(GL_QUADS);

    //顶面
    glColor3f(0.0, 1.0, 0.0);
    glVertex3f(1.0, 1.0, -1.0);     //右上顶点
    glVertex3f(-1.0, 1.0, -1.0);    //左上顶点
    glVertex3f(-1.0, 1.0, 1.0);     //左下顶点
    glVertex3f(1.0, 1.0, 1.0);      //右下顶点

    //底面
    glColor3f(1.0, 0.5, 0.0);
    glVertex3f(1.0, -1.0, 1.0);     //右上顶点
    glVertex3f(-1.0, -1.0, 1.0);    //左上顶点
    glVertex3f(-1.0, -1.0, -1.0);   //左下顶点
    glVertex3f(1.0, -1.0, -1.0);    //右下顶点

    //前面
    glColor3f(1.0, 0.0, 0.0);
    glVertex3f(1.0, 1.0, 1.0);      //右上顶点
    glVertex3f(-1.0, 1.0, 1.0);     //左上顶点
    glVertex3f(-1.0, -1.0, 1.0);    //左下顶点
    glVertex3f(1.0, -1.0, 1.0);     //右下顶点

    //后面
    glColor3f(1.0, 1.0, 0.0);
    glVertex3f(1.0, -1.0, -1.0);    //右上顶点
    glVertex3f(-1.0, -1.0, -1.0);   //左上顶点
    glVertex3f(-1.0, 1.0, -1.0);    //左下顶点
    glVertex3f(1.0, 1.0, -1.0);     //右下顶点

    //左侧面
    glColor3f(0.0, 0.0, 1.0);
    glVertex3f(-1.0, 1.0, 1.0);     //右上顶点
    glVertex3f(-1.0, 1.0, -1.0);    //左上顶点
    glVertex3f(-1.0, -1.0, -1.0);   //左下顶点
    glVertex3f(-1.0, -1.0, 1.0);     //右下顶点

    //右侧面
    glColor3f(1.0, 0.0, 1.0);
    glVertex3f(1.0, 1.0, -1.0);     //右上顶点
    glVertex3f(1.0, 1.0, 1.0);      //左上顶点
    glVertex3f(1.0, -1.0, 1.0);     //左下顶点
    glVertex3f(1.0, -1.0, -1.0);    //右下顶点

    glEnd();
    //绘制正方形结束

    //-----------------------------------------
    rTri += 5;
    rQuad += 5;
}