zoukankan      html  css  js  c++  java
  • OpenGL图元的颜色属性

    OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式。

    1. RGBA颜色
    RGBA模式中,每一个像素会保存以下数据:R值(红色分量)、G值(绿色分量)、B值(蓝色分量)和A值(alpha分量)。其中红、绿、蓝三种颜色相组合,就可以得到我们所需要的各种颜色,而alpha不直接影响颜色,它将留待以后介绍。
    在RGBA模式下选择颜色是十分简单的事情,只需要一个函数就可以搞定。
    glColor*系列函数可以用于设置颜色,其中三个参数的版本可以指定R、G、B的值,而A值采用默认;四个参数的版本可以分别指定R、G、B、A的值。

    2、指定着色模型

    OpenGL允许对同一个多边形的不同顶点设定不同的颜色,用上篇的五角星为例,依次设置顶点为红,绿,蓝,白。

     1 void Star(void)
     2 {
     3 
     4     GLfloat r = 0.8f;
     5     GLfloat PointA[2] = { 0, r };
     6     GLfloat PointB[2] = { -r*sin(0.4*Pi), r*cos(0.4*Pi) };
     7     GLfloat PointC[2] = { -r*sin(Pi / 5), -r*cos(Pi / 5) };
     8     GLfloat PointD[2] = { r*sin(Pi / 5), -r*cos(Pi / 5) };
     9     GLfloat PointE[2] = { r*sin(0.4*Pi), r*cos(0.4*Pi) };
    10 
    11     glLineWidth(8.0f);//线宽,需在glBegin前设置
    12 //    glEnable(GL_LINE_STIPPLE);//启用虚线
    13 //    glLineStipple(1,1);
    14 
    15     glClear(GL_COLOR_BUFFER_BIT);
    16 
    17     glBegin(GL_LINE_LOOP);
    18     glVertex2fv(PointA);
    19     glColor3f(1.0f, 0, 0);
    20     glVertex2fv(PointC);
    21     glColor3f(0, 1.0f, 0);
    22     glVertex2fv(PointE);
    23     glColor3f(0, 0, 1.0f);
    24     glVertex2fv(PointB);
    25     glColor3f(1.0,1.0,1.0);
    26     glVertex2fv(PointD);
    27 
    28     glEnd();
    29 
    30     glFinish();
    31 }

    效果如下:

    补充:

    在默认RGBA模式下,2个颜色不同点之间的其余点,OpenGL会计算后填上颜色相近的点,使之有颜色渐变的效果。使用glShadeModel()函数可以关闭这种计算。

    glShadeModel的使用方法:
    glShadeModel(GL_SMOOTH);    // 平滑方式,这也是默认方式
    glShadeModel(GL_FLAT);      // 单色方式

  • 相关阅读:
    Solr学习笔记(5)—— Spring Data Solr入门
    Redis学习笔记(6)——SpringDataRedis入门
    SpringDataRedis java.net.UnknownHostException: 127.0.0.1 错误
    Spring Security 入门
    基于Laravel框架下使用守护进程supervisor实现定时任务(毫秒)
    laravel框架中Job和事件event的解析
    Laravel源码解析之model(代码)
    Laravel框架下路由的使用(源码解析)
    Laravel服务容器的绑定与解析
    laravel框架中超实用的功能介绍
  • 原文地址:https://www.cnblogs.com/SeekHit/p/4838052.html
Copyright © 2011-2022 走看看