• Qt OpenGL 添加颜色


    这次教程中,我们将在第02课的基础上,教大家如何使用颜色。我们将一起理解两种着色模式(光滑着色与平面着色),并运用这两种模式分别给第02课的三角形和正方形着色。我们将使用平面着色给四边形着色,即给三角形涂上一种固定的颜色;使用平滑着色给三角形着色,将三角形的三个顶点的不同颜色混合在一起,创建漂亮的色彩混合。
    程序运行时效果如下:
    下面进入教程:
    要对三角形和四边形进行着色,只需在第02课代码的基础上,对paintGL()函数作一定的修改。
    下面我将重写整个paintGL()函数,具体代码如下:
     1 void MyGLWidget::paintGL()                              //从这里开始进行所以的绘制
     2 {
     3     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除屏幕和深度缓存
     4     glLoadIdentity();                                   //重置当前的模型观察矩阵
     5  
     6     glTranslatef(-1.5f, 0.0f, -6.0f);                   //左移1.5单位,并移入屏幕6.0单位
     7     glBegin(GL_TRIANGLES);                              //开始绘制三角形
     8         glColor3f(1.0f, 0.0f, 0.0f);                    //设置当前色为红色
     9         glVertex3f(0.0f, 1.0f, 0.0f);                   //上顶点
    10         glColor3f(0.0f, 1.0f, 0.0f);                    //设置当前色为绿色
    11         glVertex3f(-1.0f, -1.0f, 0.0f);                 //左下
    12         glColor3f(0.0f, 0.0f, 1.0f);                    //设置当前色为蓝色
    13         glVertex3f(1.0f, -1.0f, 0.0f);                  //右下
    14     glEnd();                                            //三角形绘制结束
    15  
    16     glTranslatef(3.0f, 0.0f, 0.0f);                     //右移3.0单位
    17     glColor3f(0.5f, 0.5f, 1.0f);                        //一次性将当前色设置为蓝色
    18     glBegin(GL_QUADS);                                  //开始绘制四边形
    19         glVertex3f(-1.0f, 1.0f, 0.0f);                  //左上
    20         glVertex3f(1.0f, 1.0f, 0.0f);                   //右上
    21         glVertex3f(1.0f, -1.0f, 0.0f);                  //左下
    22         glVertex3f(-1.0f, -1.0f, 0.0f);                 //右下
    23     glEnd();                                            //四边形绘制结束
    24 }
    其实与第02课相比,只是增加了4行代码而已。我们利用glColor3f(r, g, b)函数来选择颜色进行着色,该函数三个参数依次是红、绿、蓝三色分量,范围从0.0到1.0之间,类似于之前所讲的清除屏幕背景函数。当我们将颜色设为某种颜色时,接下来的代码绘制出的对象的颜色就都是对应颜色的。
    对于用光滑着色的三角形,我们需要分别对于3个顶点分别选择颜色,再分别进行绘点。故我们在每次绘点之前都需要调用一次glColor3f(r, g, b)进行选色,glEnd()之后,三角形将被填充,但因为每个顶点有不同的颜色,因此看起来颜色从每个顶点喷出,并刚好在三角形的中心汇合,三种颜色相互混合,这就是平滑着色;而对于使用平面着色的四边形,我只需要在一开始就选择好颜色,直接绘制四边形即可。
    还有一点值得提的是,顺时针绘制图形时,意味着我们所看见的是图形的背景,这在后面对图形有一定影响。
    现在就可以运行程序查看效果了!
  • 相关阅读:
    50个必备的实用jQuery代码段
    js前台改变服务器控件的disable的属性,后台获取不到值
    什么是线程安全?
    解决用JS修改服务器端控件值后在后台无法获取修改后值的问题
    C# 集合类 :(Array、 Arraylist、List、Hashtable、Dictionary、Stack、Queue)
    ASP.NET MVC生命周期介绍
    求一段CSS样式代码;要求是Table的标签样式,实现Table标签奇数行显示一个颜色;偶数行显示另外一种颜色
    JavaScript中Date.parse 函数用法
    sql 获取 一列的值显示一行
    超强 css 实现 table 隔行 ,隔列 换色
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14047848.html
Copyright © 2020-2023  润新知