RGBA HSB
 
HSV颜色模型对应于画家的配色的方法。画家用改变色浓和色深的方法来从某种纯色获得不同色调的颜色。其做法是:在一种纯色中加入白色以改变色浓,加入黑色以改变色深,同时加入不同比例的白色,黑色即可得到不同色调的颜色
 

1. 几个概念

    环境光——经过多次反射而来的光称为环境光,无法确定其最初的方向,但当特定的光源关闭后,它们将消失.

  • 全局环境光——它们并非来自特定的光源,这些光经过了多次散射,已经无法确定其光源位于何处.
  • 散射光——来自同一方向,照射到物体表面后,将沿各个方向均匀反射,因此,无论从哪个方向观察,表面的亮度都相同.
  • 镜面反射光——来自特定方向,也被反射到特定方向.镜面反射度与之相关.
  • 材质发射光——用于模拟发光物体.在OpenGL光照模型中,表面的发射光增加了物体的亮度,它不受光源的影响,另外,发射光不会给整个场景中增加光线.
  • OpenGL在模拟光源时,假定将发射出的光分解为R,G,B三个分量,这样,对于每个光源,可以使用其发射的红光,绿光和蓝光的量来描述;而对于表面的材质,可以使用其在各个方向反射的红光,绿光和蓝光的比例来描述.
  • 光源只对吸收或者反射光线的表面产生影响,每个面都由具有各种属性的材质组成,材质本身可能发射光(如汽车前灯),沿所有方向散射入射光(一般情况)或者沿特定方向反射入射光(如镜面和其它光滑表面).
  • 材 质的环境色,散射色和镜面反射色,它们决定了材质对环境光,散射光和镜面反射光的反射率.将材质的环境光反射率与每个光源的环境光分量相乘;将散射光反射 率与散射光分量相乘;将镜面反射光反射率与镜面反射光相乘.材质对环境光和散射光的反射率决定了其颜色,而这两种反射率往往是相等的,材质的镜面反射色通 常是白色或灰色(即(1.0,1.0,1.0)),因此镜面反射点的颜色一般为光源中镜面反射光的颜色.
  • OpenGL光照模型将光照分为四个独立的部分:环境光,散射光,镜面反射光和发射光,这四种光被分别计算,然后叠加起来.
  • 光线的R,G,B值表示各分量的强度,材质的R,G,B值表示材质对相应分量的反射比例.
  • 定向光源不存在三种光线的衰减,但是定位光源存在衰减.
  • 被照射的物体不会向其它物体发出光线.
  • 为物体的每个顶点定义法线向量,这些法向量决定了物体相对于光源的朝向.
  • 创建和选择一个或多个光源,并设置光源的位置.
  • 创建和选择光照模型,它定义了全局环境光的等级和观察点的实际位置(用于光照计算).
  • 启用光照.
  • 设置场景中物体的材质属性.
  • 为顶点指定法向量:glNormal3fv(n0);glVertex3fv(v0);
  • 创建光源,指定位置:
    glLightfv(GL_LIGHT0,GL_POSITION,light_position); 
    glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);注意,GL_POSITION的默认值为(0,0,1,0),它定义了一个指向Z轴负方向的定向光源.
  • 选择光照模型:其包括四项内容,即全局环境光强度,观察点靠近场景还是位于无穷远处,对物体的正面和背面是否采用相同的光照计算,以及是否将镜面反射颜色同环境颜色和散射颜色分开,并在纹理操作后应用它.函数有
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);
    glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER,lmodel_viewer)……,其中近视点还是远视点只影
    响镜面反射区的计算.
  • 启用光照:glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);
  • 设置材质属性:
    用glMaterialfv(GLenum face, GLenum pname, Type* param)函数设置GL_AMBIENT,
    GL_DIFFUSE, GL_AMBIENT_AND_DIFFUSE, GL_SPECULAR, GL_SHINNESS,
    GL_EMISSION等值.
  • 光源的环境光默认为(0.0,0.0,0.0,1.0),即没有环境光.
  • 光源的散射光默认为(1.0,1.0,1.0,1.0),即存在白色散射光.

  • 源的环境反射光默认值有两种情况,一种对应于光源GL_LIGNT0,其GL_SPECULAR为(1.0,1.0,1.0,1.0),即白色光;另一种
    对应于其它光源,其默认值为(0.0,0.0,0.0,0.0).一般情况下,光源的GL_SPECULAR应该和GL_DIFFUSE值相同.
  • 默认情况下,定位光源向所有方向发射光,但可以将其设置为聚光灯,使之在锥体内发光.

  • 照模型中,全局环境光默认为(0.2,0.2,0.2,1.0),即存在微弱的白光;视点位置默认为0.0或者GL_FALSE,即无穷远处;默认采用单
    面光照,即GL_LIGHT_MODEL_TWO_SIDE为0.0或GL_FALSE(在对物体存在切割时,要启用双面光照);默认情况下,镜面反射颜
    色在纹理映射之前完成,即GL_LIGHT_MODEL_COLOR_CONTROL的值为GL_SINGLE_COLOR.

  • 质属性的默认值:GL_AMBIENT (0.2,0.2,0.2,1.0); GL_DIFFUSE (0.8,0.8,0.8,1.0);
    GL_SPECULAR (0.0,0.0,0.0,1.0); GL_SHINNESS 0.0; GL_EMISSION
    (0.0,0.0,0.0,1.0).
  • 顶点被照射时的颜色: 顶点颜色=顶点的发射光颜色  +
                              全局环境光与材质的环境光属性 +
                              各光源中衰减后的环境光,散射光和镜面反射光
      执行光照计算后,颜色值(RGBA模式)被截取到[0.0,1.0].
  • 顶点的发射光颜色即glMaterialfv()中的GL_EMISSION值.
  • 反射的全局环境光 = glLightModelfv()指定的GL_AMBIENT * glMaterialfv()指定的GL_AMBIENT值.
  • 光源的贡献 = 衰减因子 * 聚光效果 * (环境光 + 散射光 + 镜面反射光);其中,环境光 = glLightfv()指定的GL_AMBIENT * glMaterialfv()指定的GL_AMBIENT;
    散射光的计算需要考虑光线的照射角度,光源散射分量和材质的散射属性:
    散射光 = 
     (max{L  dotproduct n,0} * light_diffuse * material_diffuse),L为顶点到光源的 单位矢量,n为顶点的单位法线向量.
    镜面反射光项也取决于光线的照射角度.若(L dotproduct n)<=0;顶点将没有镜面反射光项,否 则镜面反射光取决于下列因素:
     1) 顶点的单位法向量n.
     2) 从顶点指向光源的单位矢量和从顶点指向视点的单位向量的和,此处假设光照模型中采用近视点, 否则第二个被加的单位向量为(0,0,1);然后将相加得到的向量归一化,记为s.
     3) 镜面反射指数(glLightfv()指定的GL_SHINNESS).
     4) 光源的镜面反射光分量(glLightfv()指定的GL_SPECULAR,一般和其GL_DIFFUSE相同).
     5) 材质的镜面反射属性(glMaterialfv()指定的GL_SPECULAR).
     计算公式:(max{s dotproduct n,0})^shinness * light_specular * material_specular.
 
0
0

RGBA HSB opengl光照模型的更多相关文章

  1. RenderMonkey 练习 第二天 【opengl 光照模型】

    光照模型 3D渲染中, 物体表面的光照计算公式为: I = 环境光(Iambient) + 漫反射光(Idiffuse) + 镜面高光(Ispecular); 其中,环境光(ambient)计算公式为 ...

  2. 【转】OpenGL基础图形编程(二)

    原文:http://blog.chinaunix.net/uid-20638550-id-1909184.html  分类: 十一.位图与图像 11.1.位图 11.1.1 位图(Bitmap)与字符 ...

  3. OpenGL ES 简单教程

    什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库. 为桌面版本号OpenGL 的一个子集. ...

  4. 3D OpenGL ES

    什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库. 为桌面版本OpenGL 的一个子集. ...

  5. Android OpenGL ES 开发教程 从入门到精通

    感谢,摘自:http://blog.csdn.net/mapdigit/article/details/7526556 Android OpenGL ES 简明开发教程 Android OpenGL ...

  6. openGL光源概念

    1. 光照模型      环境光——经过多次反射而来的光称为环境光,无法确定其最初的方向,但当特定的光源关闭后,它们将消失. 全局环境光——每个光源都能对场景提供环境光.此外,还有一个环境光,它不来自 ...

  7. OpenGL 资源汇编

    本文收集和汇总了 OpenGL 的文档.教程和在线书籍,供学习和开发者參考. OPENGL开发教程:http://www.linuxgraphics.cn/opengl/index.html Open ...

  8. Glidar: 一个基于OpenGL的开源实时3D传感器仿真器

    1 简介 这篇博文将介绍一个简单易用的3D传感器仿真器,可以用来模拟Lidars,立体视觉,基于时间飞行技术的ToF相机和微软的Kinect实时产生3D点云数据.Glidar仿真器并不是针对特定的某一 ...

  9. golang.org/x/mobile/exp/gl/glutil/glimage.go 源码分析

    看这篇之前,建议先看之前几篇,这几篇是基础. Go Mobile 例子 basic 源码分析 http://www.cnblogs.com/ghj1976/p/5183199.html OpenGL ...

随机推荐

  1. linux gzip 命令详解

    减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用. 语法:gzip  ...

  2. oracle用sql 语句如何向表中插入时间?

    有关日期的操作中,更多的是涉及系统当前时间,用sysdate表示即可,如果是插入其他非系统时间的日期类型数据的话,用to_date转换再插入就可以了.例: insert into 表(c_date) ...

  3. PHPCMS v9在后台文章管理列表添加类别

    进入PHPCMS v9后台—内容,进入PHPCMS的文章管理列表,要实现在文章标题前显示文章类别,就是可以直接在文章列表里看到类别,不需要点击进入编辑页面才可以看到,如下图: PHPCMS v9在后台 ...

  4. JavaScript 中的执行上下文和调用栈是什么?

    http://zcfy.cc/article/what-is-the-execution-context-amp-stack-in-javascript-by-david-shariff-4007.h ...

  5. help()

    help() 用于查看函数或模块的帮助信息 In [1]: help(id) # 查看id()这个函数的帮助信息,注意不要写成help(id()) id(...) id(object) -> i ...

  6. PyQt4文件对话框QFileDialog

    文件对话框允许用户选择文件或文件夹,被选择的文件可进行读或写操作. #!/usr/bin/python # -*- coding: utf-8 -*- import sys from PyQt4 im ...

  7. nested exception is org.springframework.beans.factory.BeanCreationException: 不能注入对象 创建对象失败 spring

    [出现错误的背景] 在使用Spring+SpringMVC+Mybatis SSM集成框架时,服务器启动就会报错. [错误根源] XML配置错误. [解决方案] 第一步.查找springmvc.xml ...

  8. 简单的网络爬虫程序(Web Crawlers)

    程序比较简单,但是能体现基本原理. package com.wxisme.webcrawlers; import java.io.*; import java.net.*; /** * Web Cra ...

  9. Android 内存泄露总结(附内存检测工具)

    https://segmentfault.com/a/1190000006852540 主要是分三块: 静态储存区:编译时就分配好,在程序整个运行期间都存在.它主要存放静态数据和常量. 栈区:当方法执 ...

  10. python实现HTTP代理的思路和Demo

    一.首先什么是代理: 代理其实就是中间转发的那个玩意,所以在代码逻辑上也是如此的. 二.Python写http代理的基本逻辑: (1)接受浏览器发出的请求,解析,拼凑成该有的样子,然后使用套接字发出去 ...