[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 _/_/_/