zoukankan      html  css  js  c++  java
  • 各向异性着色

            各向异性着色是一种逐像素颜色计算方案。在各向异性着色方案中,镜面光在表面各个方向上并非以均等方式反射。其原因在于:材质在各个方向上包含不同的属性,且毛皮、头发以及拉丝金属均具有此类特征。

      传统的镜面反射数学公式,我们一般是采用:

                S = Ls * Ms *(R * E)SH

          而各向异性着色方案,我们采用以下数学模型:

                dl = T * L

                de = T * E

                S = Ls * Ms * (dl * de + (√(1-dl * dl) * √(1 - de * de))SH)

          其中,T表示切向量(如果不明白切向量是什么,自己去补充该部分的数学知识,在这里不做赘述),L表示光线向量,E表示眼睛向量,SH表示光泽度。

      下面我将展示一段片元着色器,并假设切向值、光源、眼睛向量以及vColor值均在对应的顶点着色器中计算完毕。另外,各向异性着色参数uKa、uKd、以及uKs假设已传递至当前着色器中,且颜色值vColor用与ADS光照模型中的全部3个变量之上。

      vec3 ambient = Vcolor.rgb;

      float dl = dot(That, Lhat);

      vec3 diffuse = sqrt(1. - dl * dl) * vColor.rgb;

      float de = (That , Ehat);

      vec3 spec = uLightColor * pow(dl * de + sqrt(1. - dl * dl) * sqrt(1. - de * de), uShininess);

      fFragColor = vec4(uka * ambient + ukd * diffuse + uks * spec , 1.);

  • 相关阅读:
    oracle行转列
    JVM设置空间大小
    Spring AOP 业务权限管理
    清晨漫步
    pull解析xml(android)
    今昔何昔
    Spring: Document root element "beans", must match DOCTYPE root "null
    xfire
    心之所向
    Oracle数据库连接
  • 原文地址:https://www.cnblogs.com/SmileSFL/p/10570077.html
Copyright © 2011-2022 走看看