私はC++で書かれた古いレイトレーサを書き直し、XNAフレームワークを利用してC#でそれを行うことにしました。ワールドビュープロジェクションマトリックスに関する疑問XNAを使用したレイトレースの質問
私はまだ私の古い本を持っていますが、私はいくつかのアイデアに関して混乱していますが、誰かがそれをうまく表現できるかどうか疑問に思っていました。上記のコードで
for each x pixel do
for each y pixel do
//Generate Ray
//1 - Calculate world coordinates of current pixel
//1.1 Calculate Normalized Device coordinates for current pixel 1- to -1 (u, v)
u = (2*x/ WIDTH) - 1 ;
v = (2*y/HEIGHT) - 1 ;
Vector3 rayDirection = -1*focalLength + u'*u + v'*v
U「とV」は与えられたカメラのために計算orthnormal基礎となっている(私は同じ名前が、それは混乱します知っている)
私は本に従うと、方法それそれを行う場合表現する、それは動作します。しかし、私はXNAを活用しようとしており、同じアクションを実行する方法を混乱させていますが、Matricesを使用しています。
だから私はそれは私が方向ベクトルを得るために適用することになっています操作のために、私は混乱しているこの時点でだXNAコード
class Camera
{
public Camera(float width, float height)
{
AspectRatio = width/height;
FOV = Math.PI/2.0f;
NearPlane = 1.0f;
FarPlane = 100.0f;
ViewMatrix = Matrix.CreateLookAt(Position, Direction,this.Up);
ProjectionMatrix=Matrix.CreatePerspectiveFieldOfView(FOV,
AspectRatio,NearPlane,FarPlane);
}
}
で次の手順を交換しようとしました任意のピクセル(x、y)について?私の頭の中で
私は思っている: (モデル空間内)(U、V)= ProjectionMatrix *にviewMatrix * ModelToWorld *頂点
したがって、それは
頂点(ワールド空間であるという意味になるだろう
私はまた、正則であるので、表示行列が転置される方法と反転される方法について何かを思い出しました。
を入れてカメラ行列の逆。例:http://www.scratchapixel.com/lessons/3d-basic-rendering – user18490
これは非常に古い質問ですが、私はあなたが求めていたのとまったく同じものを探してこのスレッドに来ました。 @FreaknBigPandaの答えは本当に非回答です。基本的な質問は変わりません。レイ・トレーサのパラメータ(カメラの位置、向き、焦点距離など)はどのように変換行列と投影行列を取得しますか?これは、外部で行われたものとレイ・トレーサからの出力を結合する必要がある場合に特に関係します。答えを見つけたことはありますか? – TSGM