文章目录

一、前置知识

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

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

注意事项:

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

二、运行效果

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


三、具体代码

完整代码可参考:​​OPenGL笔记–创建一个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;
}