2016-04-18 4 views
1

私の質問はコンピュータグラフィックス分野では非常に基本的ですが、何とか答えが見つかりませんでした。パイプラインと3D変換の表示

プロローグ:

私はキャンバス上でポリゴンを出力するプログラムを書きたい、と私は、ユーザーがポリゴンで再生できるようしたいのですが - X/Yの周り(スケール変換し、回転/ z軸)。

Java AWTのみを使用する必要があります。 JOGL(JavaのOpenGL用ライブラリ)ではありません。


3Dの世界はベクトルとウィンドウサイズまで、ポイントを見て、プログラムへの入力ファイル、ならびにそのようなカメラの座標として「カメラ」プロパティを介したとして座標として私が使用(ポリゴンを受け取ります3dから2dへの投影)。


最初の質問:

私の最初の問題は見パイプラインを記述することですので、3Dの世界coordinatsが2D座標上にそれを投影し、その後、閲覧座標(カメラ座標)に変換しますし、クリッピングを実行してパースペクティブを作成します。私は無数のビデオや方法を見てきましたが、私は最終的な行列を決定することができません。


2番目の質問:

私の第二の問題は、3D変換行列を適用するには、です。 変換を元のワールド座標に適用してから(もちろん、ビューイングパイプラインを継続して)、直接座標を表示する(そしてそのポイントからパイプラインを続ける)必要がありますか?

説明のために、各ユーザー変換で再計算されたA→B→C→Dの表示パイプラインを示し、ユーザーが開始した変換(上記のいずれかになり得る)をT.

私の関心事は、T A→B→C→DかA→T B→C→Dかどうかです。

ヘルパーに感謝します。あなたは通常、頂点から行く

+0

pingulの回答と私のコメントに従ってください。通常、 'reshape'メソッドでは、投影行列と' glViewport'を計算(アップロード)します。 'display'の開始時に代わりに行列を表示し、i番目のモデルのレンダリングの開始時に各モデルのモデル行列を表示します。 – elect

答えて

0

方法は、スクリーン座標への座標だから、例示するために

(1) vertex -> (2) model -> (3) world -> (4) view -> (5) screen 

である:ポリゴンが最初に

  • を指定座標

    1. たぶん、あなたは/剪断力を回転/拡大縮小あなたのモデルを作成するポイント
    2. あなたのモデルを世界に置きます
    3. あなたは世界にあなたのカメラを置きます(あるいは、カメラの位置に合わせて世界を動かします)。これは、lookAt行列を置く場所です。我々は右に掛けたよう
    4. あなたは、画面

    上に投影し、我々はプログラムの中でそれを書くときの順序を切り替える必要があります。最後の文は次のようになります。

    outPosition = screenProjection*worldToView*modelToWorld*polygonToModel*inPosition 
    

    ですから、あなたがTA->B->C->DA->TB->C->Dを使用するかどうか、見二つの異なる効果を生成します:最初は、私が挙げたものと同様であろう(すなわちTがpolygonToModelとして働くだろう)、そうでなければmodelToWorld変換として機能します。どちらの作品でも、それぞれ異なる結果が得られます。

    ここでのすべての変換は、4行4列の行列です。ステップ2〜4の変換はすべて恒等行列(すなわち、スケーリング/せん断/回転などはありません)でもかまいませんが、投影には錐台を作成する必要があります。あなたはhereと書かれているようなものを使って自分自身を作成することができますが、Java用の3D数学ライブラリを使う方が簡単かもしれません。

  • +0

    ' 'モデル - >(2)ワールド - >(3)ビュー - >( 4)screen'と 'outPosition = viewToClip * worldToView * modelToWorld * inPosition'です。今後の頂点は、実際にはモデル空間*に定義されています* – elect

    +0

    @elect私は同意します、それは通常私がどのように書くかです。上記の例では、質問と同じ量の変換があり、それはまだ賢明です。例えば。私は 'polygonToModel'変換が有用であると考えています。長さが1の辺を持つ立方体があり、それを拡大したいと思うかもしれません - あなたの点を再定義するよりも別の変換を追加する方が良いでしょう。 – pingul

    +0

    スケーリングはまだmodelToWorld行列の一部です。 – elect

    関連する問題