コンピューターグラフィックス 

目次

第1節レイトレーシングの概要と特徴

第2節光線の種類と追跡

第3節光線と物体の交差判定

第4節レイトレーシングの高速化


テスト

Logをみる

Back
 

第11章 レイトレーシング 

第3節  物体と光線の交差判定

 前節では物体と交差した光線を、いかにして追跡するのかを解説しました。本節では物体と光線の交差が発生したかどうかを判定する手法を解説します。

光線と球の交差判定

 球の中心ベクトルをT、視点ベクトルをS、視点から球の中心へのベクトルをRとする。Kを視線ベクトルとして、その長さを1とします。 視線と球の交点のベクトルVはある変数tをつかって

V=t×KーR

と表されます。このベクトルの内積は球の半径radの2乗に等しいので

(t×K−R、t×K−R)=rad×rad

これを展開して

(K、K)×t^2−2×(R、K)×t+(R、R)−rad×rad=0

|k|=1なので

t^2−2×(R、K)×t+(R、R)−rad×rad=0 となります。

これはtに関しての2次方程式と見れます。この式においてtが実数解を持てば視線と球は交差します。2次方程式の解の公式より

Z=(R、K)×(R、K)−(R、R)+rad^2

としてZ≧0です。ただしこのときtは

t=−(R、K)+√Z

t’=−(R、K)−√Z

の二つが解となるがt<0かつt’<0の場合視線と球の交点はすべて視点より後ろ側にあることになり視線と球は交差しません。よって球と視線が交差する条件は

(Z≧0)&&(t>0||t’>0)

となります。

光線と平面の交差判定

 視点からスクリーンへ向かって飛ぶ視線ベクトルYは、視点をA視線の方向を示す単位ベクトルをBとすると、(t≧0)の変数tを用いて、

Y=A+Bt と表すことができます。

一方平面の方程式は

aX+bY+cZ+d=0 で表されます。これをn=(a,b,c)^Tを用いて

n^TY+d=0と表せます。

この二つを連立させて、tが解を持つのならばこの視線と平面は交差します。

n^T(A+Bt)+d=0   をtに関する式にして

t=-(n^TA+d)/n^TB

となりこれが解を持てば視線と平面は交差します。ただしt<0の場合、交点は視点より後方に存在するためt>0の条件を満たすtの解のみ成立します。

光線とポリゴンの交差判定

 ポリゴン(多角形)は平面状に存在するので、まず平面との交差点を求め、その後その交点がポリゴン内部に含まれているかの判定を行えばわかります。判定の方法としては、交点から半直線をとばし、ポリゴンの辺と交差する回数をカウントする方法があります。奇数回交差したのなら交点はポリゴン内部、偶数回接触したなら外部ということになります。この判定を行う際はポリゴンの法線と、投影した平面の法線が直行しないことに気をつければ、2次元空間で行っても問題ありません。

図の場合上の線は交差が2回なのでポリゴンの外部、下の線は3回交差しているのでポリゴンの内部に存在するとわかります。

  

******************************