2

私は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 *頂点

したがって、それは

頂点(ワールド空間であるという意味になるだろう

私はまた、正則であるので、表示行列が転置される方法と反転される方法について何かを思い出しました。

+0

を入れてカメラ行列の逆。例:http://www.scratchapixel.com/lessons/3d-basic-rendering – user18490

+1

これは非常に古い質問ですが、私はあなたが求めていたのとまったく同じものを探してこのスレッドに来ました。 @FreaknBigPandaの答えは本当に非回答です。基本的な質問は変わりません。レイ・トレーサのパラメータ(カメラの位置、向き、焦点距離など)はどのように変換行列と投影行列を取得しますか?これは、外部で行われたものとレイ・トレーサからの出力を結合する必要がある場合に特に関係します。答えを見つけたことはありますか? – TSGM

答えて

-1

はNDCの理由は、あなたが任意のサイズの画像(必ずしも1:1)にピクセル単位で画像の高さ/幅をマッピングすることができることにある:あなたが欲しい

  1. 以下だった私は理解 基本的にどのようなピクセルX & Yを-1から1までの均一な矩形に変換する(実質的にビューフレーム内でカメラを中心に合わせる)
  2. FOV、アスペクト比およびニアプレーンを使用する逆投影行列を実行して(NDC座標)をワールド空間座標に変換する
  3. あなたが探している説明のほとんどはwww.scratchapixel.comで見つけることができる世界空間でカメラの相対座標
  4. 計算方向に
1

Theresは光線追跡に行列を使用する必要はありません。遠近投影法はシステムから逸脱します。これはレイトレーシングのメリットの1つです。

urコメントも混乱します。

// 1 - //1.1正規化されたデバイスは、-1に現在のピクセル1-座標計算世界が現在のピクセル の座標計算(U、V)のでドン光線追跡の任意の役割を持っているdoesntの

NDCあなたがここで何を話しているのか分かりません。あなたがしていることは、あなたがワールド空間で設定したピクセルの仮想グリッドに基づいてレイの方向 を計算していることです。その光線をシーンにトレースして、それが何かと交差するかどうかを調べることになります。

本当にあなたは本当に異なる空間の儀式について心配する必要はありません。すべてを世界の座標に入れて、それを1日と呼んでください。 複雑なモデル(スケール回転やたわごとのようなモデル変換)をしたい場合は、モデル - >ワールド変換が必要かもしれませんが、最初に線を書き始めるときには、 トレーサを心配する必要はありません。

XNAを使用する場合は、そのカメラクラスを使用できますが、一部のメンバーは役に立たないようです。すなわち母体と近平面および遠平面を含む。

関連する問題