2022/4/20(水) 二次曲面とトーラス レイトレーシングで使えるプリミティブ (球、二次曲面、トーラス)を紹介します 各プリミティブまでの距離tを求める式と プリミティブ上の点P(x,y,z)での法線方向 ベクトルFの式を 最後尾の1.~5.の図に載せています 以下、1.~5.の式の説明です ここではベクトルv(上に矢印)をV(大文字)で表す事にします 1. 始点Vから視線単位ベクトルE方向に見た 原点が中心の半径rの球までの距離tを求める (原点が中心以外の球は、球と始点を平行移動 させ中心を原点に持ってくれはよい) 球はx 2 +y 2 +z 2 =r 2 で表せます ベクトルP=(x,y,z)で表すと |P|=x 2 +y 2 +z 2 なので |P|=r です (位置ベクトルPの長さがrの位置の集まり) 始点Vから視線(単位ベクトル)E方向に見た |P|=r までの距離tを求められれば 交点も分かり、 レイトレーシングに必要な値を計算できます (法線ベクトルは中心から交点の方向です) 詳しくは、 https://ulprojectmail.blogspot.com/2021/06/n88-basic-1.html N88-BASICでレイトレーシング (1回目) ~で解説しています 2. 二次曲面の場合 二次元の場合は x 2 /1 2 + y 2 /1 2 = 1が円 x 2 /a 2 + y 2 /b 2 = 1が楕円 x 2 /a 2 - y 2 /b 2 = 1が双曲線 のように、a,bの値やa 2 ,b 2 の符号によって 形がかわります 法線は x 2 /a 2 + y 2 /b 2 + z 2 /c 2 = 1を f(x,y,z) = 0の形に変形し f(x,y,z) = x 2 /a 2 + y 2 /b 2 + z 2 /c 2 - 1 とすると 法線方向(勾配) grad f = (∂f/∂x,∂f/∂y,∂f/∂z) ∂f/∂xは偏微分で、fをxの関数とみなして xで微分することです ∂f/∂x = (d/dx)(x 2 /a 2 + y 2 /b 2 + z 2 /c 2 - 1) = 2x/a 2 よって (2x/a 2 ,2y/b 2 ,2z/c