HTMLでレイトレーシング (7回目)

2021/6/15(火)

HTMLでレイトレーシング (7)

 

by ULproject for HTML(JavaScript, canvas)

 

参考記事

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








反射は、前回の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)は


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


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

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


VL-BASICホームページのHTML項目内で

htmlの動作を見ることが出来ます

https://vlbasic.amebaownd.com/pages/3605089/page_202002222051


次回

HTMLでレイトレーシング (8回目)


このブログの人気の投稿

NEWS

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