文章目录
一、前置知识
通过之前的学习,我们已经知道了如何创建多边形,立方体实际就是多边形围起来的三维图形,例如:
- 椎体是4个三角形围起来的三维图形;
- 正方体是6个正方形围起来的三维图形;
注意事项:
- 要让您的对象绕自身的轴旋转,您必须让对象的中心坐标总是( 0.0, 0,0, 0,0 );
- 在绘制时多边形时,要么都逆时针,要么都顺时针,但永远不要将两种次序混在一起;
- 在绘制三角形时,开始-结束中有多余的点,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;
}