zoukankan      html  css  js  c++  java
  • 光与材质

    光用于照亮场景中的物体。当光照被启用时,Microsoft® Direct3D®根据下列组合计算每个顶点的颜色。

    • 当前材质的颜色及相关纹理贴图中的纹理像素(texels)。
    • 若已给出顶点的漫反射色和镜面反射色,则使用。
    • 场景中光源产生的光的颜色和强度,或场景中环境光的级别。

    当使用Direct3D光照和材质时,应用程序允许Direct3D代为处理照明的各种细节。如果需要的话,高级用户可以执行自己的光照计算。

    应用程序如何使用光照和材质使渲染得到的场景有很大区别。材质定义了光在表面上如何反射。直射光和环境光级别定义了反射的光。如果启用了光照,应用程序渲染场景时必须使用材质对于渲染场景而言,光不是必须的,但是如果渲染的场景没有光,那么会有许多细节不可见。渲染一个未经光照的场景至多也只能得到场景中物体的轮廓,而这对大多数用途而言是不够的。

    以下主题包含了更多信息。

    • Direct3D光照模型与自然光的比较
    • 光与材质的颜色值
    • 直射光与环境光的比较
    • 光的属性
    • 光的使用
    • 与光照相关的数学
    • 材质

      Direct3D光照模型与自然光的比较


      在自然界,当光从光源发出后,在到达用户的眼睛之前,已经经过了成千上万个物体的反射。每经过一次反射,一部分光被表面吸收,一部分被散射到各个方向,而剩余的则被反射到其它表面或用户的眼睛里。这个过程一直持续,直到光衰减为零或到达用户眼中。

      显然,要完美地模拟自然光所需的计算量太大以致于无法用在实时三维图形中。因此,考虑到速度,Microsoft® Direct3D®光照模型对自然光的工作方式进行模拟。Direct3D用红、绿、蓝三原色描述光,并将它们合成产生最终的颜色。

      在Direct3D中,当光从表面反射时,光的颜色与表面本身以某种数学方式相互作用,并产生最终显示在屏幕上的颜色。有关Direct3D使用的具体算法,请参阅与光照相关的数学

      Direct3D光照模型将光归纳为两类:环境光和直射光。每种光具有不同的属性,并以不同的方式与表面材质相互作用。环境光是经过多次散射的光以至于它的方向和来源都无法确定:它给各处提供一个较低级别的光强。摄像师使用的非直射光是环境光的一个很好的例子。

    • Direct3D中的环境光,和自然界中的一样,没有实际的方向和光源,只有颜色和光强。事实上,环境光的级别完全独立于场景中的任何发光物体。环境光不参与镜面反射。

      直射光是场景中的光源产生的光,它总是具有颜色和强度,并沿特定的方向传播。直射光与表面材质相互作用产生镜面反射高光(highlight),它的方向用作各种着色算法(包括高洛德着色算法)中的一个因子。当直射光反射时,它不影响场景中的环境光级别。场景中产生直射光的光源具有不同的特征,这些特征影响到光如何照亮场景。更多信息,请参阅光照与材质

      另外,多边形的材质具有一些属性,这些属性影响多边形如何反射它接收的光线。应用程序可以设置一个专门的反射系数,用于描述材质如何反射环境光,应用程序还可以设置另一个反射系数以决定材质的镜面反射和漫反射。更多信息请参阅材质


      光与材质的颜色值


      Microsoft® Direct3D®用四个成员——红、绿、蓝和阿尔法——描述颜色,并将它们合成,产生最终颜色。Direct3D为C++程序定义了D3DCOLORVALUE结构,该结构包含了所有成员,每个成员是一个浮点数,一般在0.0到1.0范围内,闭区间。虽然光照和材质使用相同的结构描述颜色,但对结构中的值的使用略有不同

      光源的颜色值表示它发出的某种光成分的数量。因为光不包含阿尔法成员,所以只有颜色的红、绿和蓝成员是有用的。可以把三种成员想象成投影电视的红、绿、蓝镜头。每个镜头可能被关掉(相应成员的值为0.0),或是位于范围内的某个值。镜头中照射出的颜色组合成光的最终颜色。如R: 1.0, G: 1.0, B: 1.0组合成白光,而R: 0.0, G: 0.0, B: 0.0则完全不发光。也可以产生只发出某个成员颜色的光,这样可以得到纯红、纯绿或纯蓝光,或者也可以将它们组合,得到黄色或紫色。甚至可以将颜色的成员设为负值,这样就产生了实际上将光从场景中移除的“暗光(dark light)”,得到场景变暗的效果。或者,也可以将成员设为大于1.0的值,产生特别亮的光。

      另一方面,材质的颜色值表示用该材质渲染的表面对某种光成分的反射度。颜色成员为R: 1.0, G: 1.0, B: 1.0, A: 1.0的材质会反射所有的入射光。同样,成员为R: 0.0, G: 1.0, B: 0.0, A: 1.0的材质会反射所有入射的绿光。具有多重反射系数值(译注:漫反射、镜面反射、等等)的材质可以创建不同类型的效果,更多信息,请参阅材质属性

      环境光的颜色值和用于直射光的光源及材质的颜色值是不一样的。更多信息,请参阅直射光与环境光的比较

       
  • 相关阅读:
    虚拟机网络不通
    设计师升职加薪必须知道的10个设计网站
    Centos设置防火墙与开放访问端口
    设置Jexus开机启动
    .Net 操作Excel表格
    Core 2.0使用Nlog记录日志+Mysql
    C# 操作docx文档
    JS截取页面,并保存到本地
    XmlReader 使用
    requireJS简单应用
  • 原文地址:https://www.cnblogs.com/StudipBird/p/3244680.html
Copyright © 2011-2022 走看看