N88-BASICでレイトレーシング (6回目)

2021/6/6(日)

N88-BASICでレイトレーシング (6回目)

(by ULproject for N88-BASIC, NL-BASIC)

(NL-BASICはAlt+6で高速化します)

 








次にspecular(鏡面)反射ですが、鏡のように

はっきりとモノが映るのではなく、光源の色

が反射して見える程度でハイライトとも言われ

ていたと思います。

Shininess(輝かしさ)はハイライト部分を、

鋭く(小さく明るく)するか鈍く(広く暗く)

するかの程度を表します。

 

ハイライトの色は光源の色が大きく関係して

来るのですが、このシリーズではプログラムが

複雑になりすぎないよう光源から出る光の色

を白に限定していますので、ハイライト

も白になります。

 

まず、反射ベクトルを求めます。








4 反射ベクトルS

 

図のEの反射がSです。

-Eと球の法線ベクトルNの内積

-E・N つまり -(E・N)は、Eの

始点からNに下した垂線の交点

Nの始点までの距離になり、

-2(E・N)は、Nの始点から、

Eと始点を同じにしたSの終点

までの長さになり、Nをその長さ

にしたのが、-2(E・N)Nです。

Eに-2(E・N)Nを足せばSに

なります。

 

S = E - 2(E・N)N

 

で反射ベクトルSを求められます。

 

SpecularはSが光源方向Lと同じ

方向の時最も明るく、方向がずれる

ほど暗くなりますので、内積で表す

事ができます。

値を0~1にするためS,Lを

単位ベクトルとして、

 

sp = S・L

 

shininessをshで表すと、

ハイライトはh

 

h = sp^sh

 

です。

BASICではaのb乗をa^bと書きます。


NL-BASICとblg~.zip(ray006.bas)は

以下のリンクからダウンロードできます

NL-BASIC(N88-BASIC互換?)ホームページ

Readme.txtを読んで遊んで下さい


次回

N88-BASICでレイトレーシング (7回目)


 

 

このブログの人気の投稿

NEWS

N88-BASICでゲーム (1回目)