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

本文介绍了使用OpenGL绘制三维图形的基础知识,包括如何创建立方体和椎体,并强调了对象中心坐标的重要性以及多边形绘制的规则。通过示例代码展示了如何绘制旋转的三角形和正方形,构成一个简单的3D立方体效果。

一、前置知识

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

  • 椎体是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;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝勒里恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值