2012-04-07 11 views
0

レイトレーシングをJavaで実装する課題があります。 私は多くのことを求めているわけではありません。xとyが与えられたピクセルを通したカメラからの光線をどのように構築するかについての情報があります。私はインターネット上で、それを2Dで説明する多くの情報源を見つけました。そして、3Dでそれを行う方法が必要です。予めレイトレーシング - ピクセルを通してレイを構築する

おかげ

+0

どのようにカメラの向きを表しますか? – Beta

+0

eye =その位置ポイント、direction =ベクトル方向、up-direction =上方向ベクトル、dist =画面からの距離。それはあなたが意味することですか? – MichBoy

+0

はい。あなたはカメラの位置を知っています。あなたは画面の中心の位置を計算する方法を知っていますか?座標xとyを持つピクセルの画面上の位置は?カメラからその点までの光線? – Beta

答えて

0

質問は、その位置の画面座標で(X、Y)で与えられる画面上の点の空間内の座標を検索する方法です。

あなたは画面にどの座標系を使用しているのかわかりませんので、私はいくつかの推測を行い、それに応じて調整することができます。

画面の中心には、[X、Y、Z] の中心があり、宇宙にはの位置があります。画面座標系の原点はそこにあると思います。我々は、画面に対して垂直(垂直)である「方向」ベクトルdと、「上」のベクトルuとを有する。画面の+ y方向はuと仮定します。これらのベクトルのクロス積を取ることができます。r = d x uこれは画面上で+ x方向になるようにします。画面座標が(x、y)の点の位置は[X、Y、Z] 中心 + x r + y uとなります。

+0

どうすればその解像度の画面幅、比率、fov、画像解像度を使用しないのですか? – MichBoy

+0

私は、(x、y)が3D空間と同じ距離単位であると仮定しました。ピクセル数の場合は、このソリューションを適用する前に距離に変換する必要があります。 (x、y)、画面幅、fov、画像解像度の*単位*は何ですか? – Beta

+0

画面の幅は2、画像の解像度は? 480X360とし、xとyの単位はどういう意味ですか? – MichBoy

0

基本的な考えは、与えられた位置(x、y、z)に所定の解像度のカメラがあります。あなたには光源のセットがあります。あなたはカメラの向きを持っています(角度、あなたの頭を傾けたり回転させて頭を上げたり下げたりすることを考えてください。今、あなたがしたいことは基本的に各カメラピクセルのために、それらがジオメトリに触れるまで垂直(光線)を「伸ばし」ます。次に、「何をレンダリングするか」(つまり、あなたが見つけたジオメトリのビット)を知っています。次は、オブジェクトが影になっているかどうかを判断することです。光源に向かって光線を「伸ばす」ことによって幾何学的に触れる(与えられた光源に対して、他の幾何学的なビットによって影がつく)それらが光源に到達するまで(あなたのスポットは与えられた光源によって照らされます)。

これは基本的なことですが、反射や光の拡散などを考慮すると、さらに難しくなります。

関連する問題