0

GLSurfaceArea でいくつかのオブジェクトを作成しています (これに似ています: http://www.droidnova.com/android-3d-game-tutorial-part-ii,328.html )。すべて正常に動作しますが、座標が -1.0 ~ +1.0 の間隔にあるポイントのみが表示されます。表示可能な領域のサイズを変更して、この領域にない座標を表示する方法はありますか (たとえば、(-2.0、2.0、0.0))?

4

1 に答える 1

0

ビュー錐台を変更します。これは、Android Renderer クラスで行った方法です。

int viewportWidth = -1;
int viewportHeight = -1;
int zoom = 0.5f;
float nearPlane = 3.0f;
float farPlane = 7.0f;
float FOV = 60.0f

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {

    viewportWidth = width;
    viewportHeight = height;

    gl.glViewport(0, 0, width, height);

    setProjectionMatrix(gl);

}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {

    setProjectionMatrix(gl);

}

protected void setProjectionMatrix(GL10 gl){
    if(viewportWidth <0 || viewportHeight <0){
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluPerspective(gl, FOV*zoom, 1.0f, nearPlane, farPlane);        
    } else {
        float ratio = (float) viewportWidth / viewportHeight;
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glFrustumf(-ratio*zoom, ratio*zoom, -1*zoom, 1*zoom, nearPlane, farPlane);

    }
}

ご覧のとおり、私は主に glFrustumf を使用しており、実際には GLU.gluPerspective を使用しておらず、glOrthof もまったく使用していませんが、それは問題ではありません。どの方法を使用するかによって、異なる結果が得られます。目の前から出発して遠ざかる一連の線路があると想像してください。Orthographic プロジェクションを使用すると、トラックが地平線にぶつかったときに、目の前にある場合と同じ距離でトラックが離れます。透視投影では、遠く離れた「消失点」に収束するように見えます。

上記のコードを使用する場合は、near および far planes 変数と zoom 変数も変更して、プログラムへの影響を確認してください。

于 2011-11-22T16:27:46.420 に答える