OPenGL笔记--给多边形上色

本文介绍了OpenGL中的两种着色方法:单调着色和平滑着色。通过示例代码展示了如何使用glColor3f设置顶点颜色,实现不同效果。在三角形中每个顶点设置不同颜色,实现平滑着色;而在正方形中统一设置颜色,呈现单调着色。通过调整顶点颜色,可以创建出丰富的图形视觉效果。

一、前置知识

OPenGL中上色分为:单调着色、平滑着色

  • 单调着色:给四边形图上固定的一种颜色;
  • 平滑着色:给三角形的三个顶点的不同颜色混合在一起,创建漂亮的色彩混合;

使用glColor3f(r, g, b)来设置当前画笔颜色


二、运行效果

在这里插入图片描述


三、具体代码

完整代码可参考:OPenGL笔记–创建一个OPenGL窗口

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

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

    glTranslatef(-1.5, 0.0, -6.0);

    //开始绘制三角形
    //-----------------------------------------
    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, 0.0);    //左下顶点

    glColor3f(0.0, 0.0, 1.0);		//设置画笔颜色
    glVertex3f(1.0, -1.0, 0.0);     //右下顶点

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


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

    glColor3f(0.5, 0.5, 1.0);	//设置画笔颜色

    glBegin(GL_QUADS);

    glVertex3f(-1.0, 1.0, 0.0);     //左上顶点

    glVertex3f(1.0, 1.0, 0.0);      //右上顶点

    glVertex3f(1.0, -1.0, 0.0);     //右下顶点

    glVertex3f(-1.0, -1.0, 0.0);    //左下顶点

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

在绘制三角形的时候,每个顶点前都设置了画笔颜色,所以三角形每个顶点的颜色会不一样,这就是平滑着色;
在绘制正方形的时候,只设置了一次画笔颜色,所以正方形就一种颜色,这就是单调着色;


也可以给正方形四个点设置:红、绿、蓝、黄,平滑着色;
在这里插入图片描述

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

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

    glTranslatef(-1.5, 0.0, -6.0);

    //开始绘制三角形
    //-----------------------------------------
    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, 0.0);    //左下顶点

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

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


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

    glBegin(GL_QUADS);

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

    glColor3f(0.0, 1.0, 0.0);
    glVertex3f(1.0, 1.0, 0.0);      //右上顶点

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

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

    glEnd();
    //-----------------------------------------
    //绘制正方形结束
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贝勒里恩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值