HTMLでレイトレーシング (7回目)
2021/6/15(火)
HTMLでレイトレーシング (7回目)
by ULproject for HTML(JavaScript, canvas)
参考記事
反射は、前回のspecularの式
S = E - 2(E・N)N = E + (2cosθ)N
が、そのまま使えます
視点V、視線Eの交点Pでの反射Sを前回で求め
ていますので、それらが保存されるように変更を
加えました
P、Sを新たなV、Eとしてその先の交点の色を追加
するということを繰り返せば反射で映ったものを
描けます
Level変数を追加し、反射回数を制限しています
また、slcに反射による減衰量を保存し、一定数以下なら
反射を制限するようにしています
表示する球を4個(後ろにある光源を入れると5個)
に増やすなど、ところどころ変更が加えてあります
今までのshade関数をshade_siに変更し
shade関数からshade_siを呼び出しています
shade関数では、新たに
sl1 = Sl[si];
if (sl1 > 0.0)
{
vector_specular(S, E, N);
b = 0.1;//1.0e-8; // 少し手前
V0[0] = P[0] + S[0] * b;
V0[1] = P[1] + S[1] * b;
V0[2] = P[2] + S[2] * b;
slc *= sl1;
shade(CL0, V0, S, slc, li);
if (CL0[3] >= 0.0)
{
_CL[0] += CL0[0]; _CL[1] += CL0[1]; _CL[2] += CL0[2];
}
}
を追加し、鏡面反射する表面(Sl[si] > 0)は
表面を視点、反射ベクトルSを視線として
再帰的に追跡をし、色を足していっています
ray007.htmlはMicrosoft Edgeに重ねると
動き、メモ帳でコードを見ることが出来ます
blg~.zip(ray007.html)は
以下のリンクからダウンロードできます
Readme.txtを読んで遊んで下さい
VL-BASICホームページのHTML項目内で
htmlの動作を見ることが出来ます
https://vlbasic.amebaownd.com/pages/3605089/page_202002222051
次回