2016-03-28 50 views
1

私はレイ・トレーサに取り組んでいます。私はシーンにシリンダーを追加するつもりです。私が立ち往生しているポイントは、レイが当たるポイントで表面の法線ベクトルを見つけることです。拡散照明をするためには、これが必要です。私がこの時点で持っているのは、カメラの光線が円柱に当たる3次元点と、中心軸上の点、軸の方向を表すベクトル、および半径で定義される実際の円柱です。私の質問をまとめると、どのようにして、シリンダのヒットポイント、半径、軸上の点、軸の方向ベクトルを持つ点の法線ベクトルを見つけることができますか?円柱の表面で法線を計算するにはどうすればよいですか?

+0

Unityを使用していますか?またはどの言語? – AMACB

+0

私はC言語を使用していますが、この文脈では無関係でなければなりません。 – Rpreda

+0

まあ、言語によっては便利な組み込み関数があるかもしれません。 – AMACB

答えて

1

円筒法線ベクトルは、光線が円筒と交差する点のz高さが同じで、円筒の中心線から始まり、半径の交点で終わります。それを正規化し、あなたの単位法線ベクトルを持ってください。

円筒の中心線がシーンのz軸方向に沿っていない場合は、円筒座標に変換し、法線ベクトルを計算し、それをグローバル座標に変換する必要があります。

+0

基本的に私はちょうど円筒が完全に垂直だったとして、ちょうどちょうど円筒の角度でそれを回転させるベクトルを回転行列を使用するように計算する? – Rpreda

+0

"基本的に"必要はありません。円筒座標の法線ベクトル。グローバル座標に変換します。順番にいくつかの回転があります。 – duffymo

+0

チャームのように働いた:)助けてくれてありがとう! – Rpreda

関連する問題