0

次の線を描きたいとします。

   const GLfloat lineX[] = {
        FrustumData.left * FrustumData.ratio , (FrustumData.top + FrustumData.bottom) / 2 * FrustumData.ratio, FrustumData.zFar, //point A
        FrustumData.right * FrustumData.ratio , (FrustumData.top + FrustumData.bottom) / 2 * FrustumData.ratio, FrustumData.zFar //point B
    };
    const GLfloat lineY[] = {
        (FrustumData.left + FrustumData.right) / 2 * FrustumData.ratio , FrustumData.bottom * FrustumData.ratio, FrustumData.zFar, //point A
        (FrustumData.left + FrustumData.right) / 2 * FrustumData.ratio , FrustumData.top * FrustumData.ratio, FrustumData.zFar //point B
    };
    const GLfloat lineZ[] = {
        (FrustumData.left + FrustumData.right) / 2 * FrustumData.ratio, (FrustumData.top + FrustumData.bottom) / 2 * FrustumData.ratio, FrustumData.zFar, //point A
        (FrustumData.left + FrustumData.right) / 2 , (FrustumData.top + FrustumData.bottom) / 2 , FrustumData.zNear //point B
    };

ここで、ratio = zFar/zNear で、それ以外はすべて glFrustum パラメーターです。

Frustum パラメーターの選択の行を表示する必要はありませんか、それとも glViewport に依存していますか?

私は今それらを見ていないので、その理由を理解できません。

ありがとうございました。

4

1 に答える 1

1

両者の間に直接のつながりはありません。しかし、どちらも画面上のどこに表示されるかに直接影響します。

本質的に glFrustum は、特定の種類の射影変換、つまり遠近法を作成するものを作成する関数です。OpenGL の変換段階について説明している、私が書いた別の回答を読むことをお勧めします。

その答えで私は書いた:

この変換は、目の空間の一部のボリュームを、ジオメトリがクリップされる特定の境界を持つ特定のボリュームにマップします。

glFrustum はそのようなボリュームを定義しています。先端カット (錐台) を持つピラミッドのように見えます。先端は目の空間の原点にあり、「カット」は近くのクリップ面であり、ピラミッドのベースは遠くのクリップ面です。パラメータleft、right、bottom、およびtopは、目空間単位でニア クリッピング プレーンの範囲を定義します。

于 2012-11-05T16:28:28.513 に答える