2016-03-28 7 views
3

私は、OpenGLのカメラが負のZ方向を見ていると定義していることを理解しています。だから、簡単な例では、私は、レンダリングされる私の頂点のために、彼らは次のように定義されなければならないことを想像:OpenGL:任意の頂点Z座標が負であるかどうか?

rawverts = { 
    0.0f, 0.0f, -1.0f, 
    0.0f, 0.5f, -1.0f, 
    0.5f, 0.0f, -1.0f, 
}; 

しかし、全くのガイドは私に答えを教えてくれません。私が見るところでは、 "Hello triangle"の例は、z座標が0のままにしてあり、より複雑なメッシュが定義されていれば、座標も表示されません。私はまだそれらが画面上に描画される座標の可能な値については考えていません。例えば、GLM ::視点を取る:

glm::mat4 projectionMatrix = glm::perspective(
    FoV,   // The horizontal Field of View, in degrees : the amount of "zoom". Think "camera lens". Usually between 90° (extra wide) and 30° (quite zoomed in) 
    4.0f/3.0f, // Aspect Ratio. Depends on the size of your window. Notice that 4/3 == 800/600 == 1280/960, sounds familiar ? 
    0.1f,  // Near clipping plane. Keep as big as possible, or you'll get precision issues. 
    100.0f  // Far clipping plane. Keep as little as possible. 
); 

しかし、どのようにクリッピング平面が任意の値で定義することができますか?カメラは-Z方向を向いています!さらに、-1/-4のようにnear/farのクリッピングプレーンを作成すると、-1より大きいか-4より小さいZ座標が無効になりますか?または生のz座標は0と-1の間でしか有効ではありません(やはり、確実にz座標は正式にはできません)..?

実際に何が起こるかは、OpenGL(またはglm)がクリッピングプレーンの値を受け取り、ひそかにそれらを無効にするものとしましょう。したがって、-1から-4は1から4になります。これで、0.0f, 0.0f, -1.0fが画面に表示されない理由で、1より小さく4より大きいZ座標が無効になりますか?

この段階では、答えを、単なる書籍またはこの問題に関する情報を持つ資料へのポインタとして扱います。

+0

nearとfarは、常にカメラとの距離として定義され、空間の特定の点としては定義されません。さもなければ、カメラを動かすときにクリッピング面が全面に亘っている。カメラがデフォルトで-zに沿って見えるということも起こります。 – weltensturm

答えて

3

いいえ、ポイント/頂点は正のz座標を持つことができますが、カメラを元に戻さない限り、それらは表示されません。

This articleについては約3分の1の話です。

+0

これで、1000.0f単位でカメラを戻してから、 'glm :: perspective()'を使いたいとしましょう - ニア・プレーンと遠いプレーンはどのように振る舞いますか? –

+2

@MaxBクリッピング面は常にカメラを基準にしています。カメラを移動するときに変更する必要はありません。 – HolyBlackCat

0

問題は、座標系と変換が理解できないことです。

最初にウィンドウ座標があります。あなたのウィンドウのピクセルグリッドです。純粋でシンプルです。 z軸はありません。

次はNDCです。それはGoogleです。 xyz軸で-1から1の立方体です。モデルビューと投影行列の両方をIDでロードすると、これはレンダリングする領域です。ビューポートを指定すると、NDCからウィンドウ座標に変換されます。キューブの外側の頂点からのピクセルは切り取られます。

投影法とモデルビュー行列で行うことは、NDCキューブに変換を作成してオブジェクトをカバーすることです。カメラを動かすときに、トランスフォームを変更します。トランスフォームは、任意の位置からネガティブz座標を含むNDCキューブに頂点を変換することができます。

これは物事の仕組みの短いバージョンです。長いバージョンは長すぎてここに入ることはできません。詳細については、特定の質問をしてください。

関連する問題