2

メソッドがあり、レンダリングinit()を作成しようとしています。Perspective以下は私がこれまでに持っているコードですが、私が渡した数字gluPerspective(fovy, aspect, zNear, zFar)は間違っています。fovy視野(60度)、アスペクト比(幅/高さ)だと思いaspectますが、何なのかわかりません。zNearzFar

public void init(GLAutoDrawable gld) {
    //We will  use the default ViewPort

    GL gl = gld.getGL();
    glu = new GLU();

    gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);


    glu.gluLookAt(
            25, 15, 0, // eye
            25, 15, 30, // at
            0, 1, 0 // up
            );



    // Set up camera for Orthographic projection:
    gl.glMatrixMode(GL.GL_PROJECTION);
    gl.glLoadIdentity();
    glu.gluPerspective(60, 500/300, 0.0, 60.0);

    gl.glMatrixMode(GL.GL_MODELVIEW);
    gl.glLoadIdentity();

}
4

2 に答える 2

2

近距離と遠距離の値は、オブジェクトが表示される範囲を指定します(近距離と遠距離のクリッピング平面を定義します)。60.0確かに、その視点を使用して表示されないよりもはるかに遠いオブジェクト。

ティムがすでにコメントしたように、浮動小数点値を明示的に書く方が良いです(すなわち500.0f/300.0f)。

しかし、さらに悪いことに、アイデンティティに設定する前にルックアットマトリックスを設定します(メソッドの開始時にマトリックスモードがであると仮定しますGL.GL_MODELVIEW)。おそらく、次のシーケンスの方が良いでしょう。

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
glu.gluLookAt(...);

たぶん、カメラの抽象化についてもっと調査する必要があります。

于 2012-03-15T18:20:34.427 に答える
0

ルカがすでに言ったように、近くと遠くは目に見えるオブジェクトの範囲を定義します。ただし、最も重要なのは、近い値または遠い値(現在使用している値)に0未満の値を使用しないでください。これにより、(結果として生じる奇妙なレンダリング結果を伴う)単一の射影行列が生成されます。

ニアクリッピングプレーンには適度に小さい値を使用しますが、小さすぎないようにしてください。これにより、深度バッファの精度が低下します。たとえば、通常の現実世界をモデル化する場合は、通常、10cmの近距離が適切な選択です(実際のアプリケーションでこれが意味する一般的な単位の量に関係なく)。どのオブジェクトにもそれほど目を向けることはありません。 。ただし、far値など、アプリケーションによって異なります。

そしてもちろん、ティムが言ったように、整数除算を行うので、現時点ではアスペクト比は1.0です。

于 2012-03-15T20:51:46.693 に答える