Android-приложение OpenGL ведет себя по-разному на устройстве, Z-далеко отличается? - PullRequest
1 голос
/ 30 ноября 2010

У меня есть простое приложение opengl, которое отображает произвольные трехмерные объекты. на эмуляторе все отлично работает. на моем нексусе не очень хорошо.

модель визуализируется, но в далеком z она почти обрезана. Я использую диаметр ограничивающей сферы модели в качестве моего дальнего значения Z. код кажется довольно стандартным, он включен ниже для справки.

проблема должна быть с вызовом gluPerspective (), но я не могу понять, что об этом будет отличаться между устройствами. единственное отличие состоит в том, что соотношение сторон немного отличается. Я пытался жестко закодировать значение farZ в нечто очень большое, и это решило проблему. есть идеи?

спасибо.

public void onDrawFrame(GL10 gl) {
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    gl.glLoadIdentity();

    GLU.gluLookAt(gl, 0f, 0f, 2f*mesh.diameter, 0f, 0f, 0f, 0f, 1f, 0f);

    gl.glPushMatrix();
    gl.glRotatef(mesh.rx, 1, 0, 0);
    gl.glRotatef(mesh.ry, 0, 1, 0);
    mesh.draw(gl);
    gl.glPopMatrix();
}

public void onSurfaceChanged(GL10 gl, int width, int height) {
    float zNear = 0.1f;
    float zFar = zNear + mesh.diameter;

    float aspect = (float) width / (float) height;

    float left = mesh.mid.x - mesh.diameter;
    float right = mesh.mid.x + mesh.diameter;
    float bottom = mesh.mid.y - mesh.diameter;
    float top = mesh.mid.y + mesh.diameter;

    /*
    if (aspect < 1.0) { // window taller than wide
        bottom /= aspect;
        top /= aspect;
    } else {
        bottom *= aspect;
        top *= aspect;
    }
    */

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

    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    GLU.gluPerspective(gl, 90.0f, aspect, zNear, zFar);

    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    gl.glOrthof(left, right, bottom, top, zNear, zFar);

    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glLoadIdentity();
}

1 Ответ

0 голосов
/ 02 декабря 2010

просто увеличение zFar решило проблему.У меня до сих пор нет объяснения, почему один zFar работал на эмуляторе, а не на устройстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...