私は、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座標が無効になりますか?
この段階では、答えを、単なる書籍またはこの問題に関する情報を持つ資料へのポインタとして扱います。
nearとfarは、常にカメラとの距離として定義され、空間の特定の点としては定義されません。さもなければ、カメラを動かすときにクリッピング面が全面に亘っている。カメラがデフォルトで-zに沿って見えるということも起こります。 – weltensturm