[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:00860] 照光計算その2



◆◆ 有限会社萌黄の便り(もえぎのたより)◆◆◆◆◆◆◆◆◆◆◆◆◆
<やくぜん食品のご案内> 
高齢社会を迎え、健やかに老を生きるため免疫力を高め、病気をしない身体
づくりのための漢方配合の商品です。 
是非一度ご賞味下さい。 http://www.matsuronet.ne.jp/moegi/
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆


Numakuraです。これは、[Java3Djp:00858] 照光計算
の続きです。

補足:3.Diffuse
Lambertの余弦則では、下図のように法線と光源ベクトル
のなす角度が小さいほど明るくなります。暗闇の中でテニ
スボールに一方だけからライトを当てた状況を創造すれば
わかりやすいでしょう。

            @xxxxxxxxxx (光源)
           |  /
     (法線ベクトル) | / (光源へのベクトル)
                    |/角度Θ
         ----
        ---      ---
          ---              ---

4.SpecularとShininess
この2つでHighlight(光沢)を表現します。プラスティックな
どの表面がツルツルしたものの表現に適しています。
この計算方法には、BlinnとPhongという人が考えた
2種類の方法があります。 2つを比べると、若干見え方
が変わります。Java3DはPhongのモデルではないかと
思います(違いますか?)。Phongのモデルでは、

・頂点から光源へ向かうのベクトル(LLとする)
・頂点での法線ベクトル(NNとする)
・頂点から視点に向かうベクトル(VVとする)

の3種類のベクトルを使います。まず、LLとNNから光の
反射ベクトル(RRとする)を求めます。これとVVの余弦を
計算します。両方とも単位ベクトルにしてから計算するの
で、単純に内積を求めれば算出できます。

|VV||RR|cosβ = VV・RR

これで求まった値をShininess乗します(これをhlとする)。
次に3.と同様に光の強さを求め、これにhlとSpecularの
各成分をかけます。
(VVとRRの内積を計算した結果は1.0以下であり、これを
Shininess乗するので、Shininessの値が大きいほど
Highlightがするどく(小さく)表現されます。)


最終的に色は、
・すべての光源に対して3.Diffuseの計算した総和
・すべての光源に対して4.SpecularとShininess(Highlight)
を計算した総和
・2で求めたAmbient成分
・1のEmmisive 
をすべて加えたものになります。
               
#Highlightのところをキャラクタで図示することはできません
#でした。

_/_/_/     E-mail:numakura@aie-res.co.jp    _/_/_/