HTMLでレイトレーシング (2回目)
2021/6/10(木) HTML でレイトレーシング (2 回 目 ) by ULproject for HTML(JavaScript, canvas) 参考記事 N88-BASICでレイトレーシング (2回目) 複数の球から 1番近い交点までの距離を求る関数 function distance(_t, V, E) を作ります 値が返る変数 (要素数1の配列変数)は_0を付けて 分かり易いようにしています Snが球の数で配列要素0~2の3個の球を定義します var Sn = 3 // 球の個数 // 光源 大球 小球 var SP = [[-12, 8, -5], [5, 0, -40], [0, 5, -20]];// center var Sr = [ 2 , 12 , 4 ];// radius SP[0][0],SP[0][1],SP[0][2]は0番の球の中心座標です 座標の向きは、 1回目の図1を見て下さい Sr[0]は0番の球の半径です c番の球までの距離t0を求めるには 視点 Vから球の中心座標(SP[c][0],SP[c][1],SP[c][2])を 引き、球を原点に移動させた視点を V0として 交点までの距離を求めます V0[0] = V[0] - SP[c][0]; V0[1] = V[1] - SP[c][1]; V0[2] = V[2] - SP[c][2]; t0 = distance_sphere(V0, E, Sr[c]); で t0に距離が入ります ;(セミコロン)は終止符の様なもので 必ず必要です 球 c=0,1,2のt0で一番近いもの を tにすれば良いので、 t = -1.0; si = -1; for (c = 0; c < Sn; c++) { V0[0] = V[0] - SP[c][0]; V0[1] = V[1] - SP[c][1]; V0[2] = V[2] - SP[c][2]; t0 = distance_sphere(V0, E, Sr[c]); if (t0 >= 0) { if (t0 <