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. win7cmd静态绑定arp

    netsh -c "172.16.3.1" "f4-ea-67-8b-91-cc"

  2. 快速找出System.Management.Automation.dll,c#调用powershell

    public static void InvokeSystemPS(string cmd) { List<string> ps = new List<string>(); ps ...

  3. kafka学习之-配置详解

    # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreement ...

  4. sip 认证分析

    转自:http://blog.csdn.net/wangqi0079/article/details/11569489 SIP类似Http协议.其认证模式也一样.Http协议(RFC 2616 )规定 ...

  5. php面向对象(OOP)编程完整教程

    http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/09/10/1823042.html

  6. hive与hbase的联系与区别

    hive与hbase的联系与区别: 共同点: 1.hbase与hive都是架构在hadoop之上的.都是用hadoop作为底层存储. 他们的底层是要通过mapreduce分布式计算的,hbase.hi ...

  7. com.thoughtworks.xstream.converters.ConversionException

    使用webService调用接口,返回的是xml格式,运用xstream解析的时候,出现了如下的错误: Exception in thread "Timer-1" com.thou ...

  8. date类型数据插入

    --字段类型是dateinsert into tab(column) values(to_date('2017_06_30 11:38:22','yyyy-mm-dd hh24:mi:ss'));-- ...

  9. Nginx虚拟主机配置教程

    说明:配置之前先把域名解析到服务器IP地址上 站点1:bbs.osyunwei.com  程序所在目录/data/osyunwei/bbs 站点2:sns.osyunwei.com  程序所在目录/d ...

  10. C++11新特性之九——function、bind以及lamda表达式总结

    本文是C++0x系列的第四篇,主要是内容是C++0x中新增的lambda表达式, function对象和bind机制.之所以把这三块放在一起讲,是因为这三块之间有着非常密切的关系,通过对比学习,加深对 ...