投稿

5月, 2022の投稿を表示しています

N88-BASICでRayTracingのしくみ

イメージ
2022/5/12(木) N88-BASICでRayTracingのしくみ   通常レイトレーシングは3次元空間に視線を飛ばし、 見えたものを2次元スクリーンに描画しますが、 2次元平面に視線を飛ばし、見えたものを1次元 スクリーンに描画する事で、レイトレーシングの しくみを視覚化しました   今回は、プログラムを単純化する為、光源などは無しに していますが、光源、反射、透過ありの、3次元 レイトレーシングについては、 ブログの https://ulprojectmail.blogspot.com/2021/06/n88-basic-1.html N88-BASICでレイトレーシング (1回目) ~(8回目) を読んで下さい   ます、視点から円までの距離を求めます ここで、数値(スカラー)を小文字、ベクトル (x,y成分を持つ矢印)を大文字で描くこと にします   P:任意の位置ベクトル r:円の半径 V:視点の位置ベクトル E:視線の方向単位ベクトル t:任意の値   とします位置ベクトルPは点Pと同じような ものだと思って下さいEは方向を表し、単位 ベクトルは距離(矢印の長さ)が1のベクトルで、 |E| = 1と書きます|E|はEベクトルの長さです   原点が中心で半径rの円は、 |P| = r で表されます 原点から点Pまでの長さがrの点の集まりです ので、円になります   視点VからE方向に向けた視線は、 P = V + Et で表されます   任意の場所にある円は、中心の位置を点Cとすると、 |P - C| = rとなりますが、視線の方は視点が 移動してもP = V + Etと変わりませんので、 球と視線を移動して円を原点に持ってくれば、 |P| = rの式で求めることができます よって、|P - C| = rは必要ありません   |P| = r P = V + Et   この式から視点と円間の距離tを求めます |P| = r にP = V + Etを代入します |V + Et| = r    | |を外すため両辺を2乗 (V + Et)(V + Et) = r 2  を展開 V・V + 2(V・E)t + (E・E)t 2  = r 2 ここでベクトル同士の積は内積になります E・E = |E||E| = 1×1 = 1 同じベクトルの内積はベクトルの