私はレイトレーサーを書いています(主に楽しみのために)。過去に1つ書いたことがあり、検索にかなりの時間を費やしましたが、透視投影で視線を計算する方法に光を当てるチュートリアルはないようです。 、行列を使用せずに。
私が最後にそれを行ったのは、クラスx/y
を使用してカメラの方向ベクトルから目のベクトルの角度を(潜在的に)非効率的に回転させることによるものだと思います。Quaternion
これはC++で行われ、私はこれをC#で行っていますが、それほど重要ではありません。
擬似コード(V * Q =変換操作を想定)
yDiv = fovy / height
xDiv = fovx / width
for x = 0 to width
for y = 0 to height
xAng = (x / 2 - width) * xDiv
yAng = (y / 2 - height) * yDiv
Q1 = up vector, xAng
Q2 = camera right vector, yAng
Q3 = mult(Q1, Q2)
pixelRay = transform(Q3, camera direction)
raytrace pixelRay
next
next
これに関する実際の問題は、フラットスクリーン表面ではなく、球面スクリーン表面をシミュレートしていることだと思います。
クロス積、ドット積、行列などを使用する方法と理由はわかっていますが、実際の3D数学の問題解決スキルは素晴らしいものではありません。
そのように与えられた:
- カメラの位置、方向、アップベクトル
- 視野
- スクリーンピクセルおよび/またはサブサンプリング分割
レイトレーサーのx/yピクセル座標のアイレイを生成する実際の方法は何ですか?
明確にするために:私は正確に私が計算しようとしているものです、私はそれを計算するための3D数学を思い付くのが得意ではありません、そして私が見つけたレイトレーサーコードは私が目の光線を計算するために必要なコードを持っていないようです個々のピクセル。