Open GL(OpenGL ES 2.0を含む)での透視投影行列の設定には、次の一般的な形式があります。
glm::mat4 perspective(float fovy, float aspect, float zNear, float zFar);
最後の2つのパラメータに注意してください。1つ目は、カメラに近い平面であるzNear平面を指定します。2つ目は、カメラから遠いzFar平面を指定します。
OpenGLでは、さらに遠い、つまり「画面の奥深く」にあるものは、負のZ軸を持っていることはよく知られています。(OpenGL SuperBibleやsimmilar などの信頼できるソースから取得した)設定された透視投影行列のすべてのOpenGLの例が、透視投影関数の上記の2つのパラメーター(zNear、zFar)が交換されているように見えるのはなぜですか?
この例は、GLM(OpenGL Math)webisteからの抜粋です。
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f);
zNearパラメータはzFarパラメータよりも実際にはカメラから遠いことがわかります。これは、カメラ/ビューアに100ポイント近い距離です。
あなたは提供することができます説明が理解しやすい、してください?私はこれが1つだけではなく、zFarをzNearよりも高い正の値として渡すすべての例です。ありがとう。
私の例:
私のコードでは、設定すると:
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 1000.0f, -500.0f);
私の錐台はz正方向に1000ポイント、z負方向に500ポイントと想定しています。
このように設定すると、少なくとも一部のオブジェクトが表示されますが、完璧ではありません。何らかの理由で、負のz座標に配置されたオブジェクトのみが表示されます。
これは、透視投影関数についての私の誤った理解に関連している可能性があります。