2010-11-30 14 views
1

私は任意の3Dオブジェクトをレンダリングする簡単なOpenGLアプリケーションを持っています。エミュレータ上ではうまくいく。私のネクサスでは、あまり良くない。アンドロイドのOpenGLアプリはデバイス上で動作が異なりますが、z-farは異なりますか?

モデルはレンダリングされますが、遠い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(); 
} 
+0

私はまた、\t \t GLU.gluLookAt(gl、0f、0f、2f * mesh.diameter、0f、0f、0f、0f、1f、0f)の呼び出しに注意してください。 –

+1

まず、なぜ正射投影に切り替えるのですか?次に、頂点データをロードするときのモデル行列は何ですか?あなたはZで翻訳やスケーリングをしていますか? –

+0

私はonSurfaceChanged()とonDrawMethods()全体を含むように更新しました。アンドロイドでおなじみでない場合、onSurfaceChanged()は "init"メソッドで、onDraw()はメインループです。ご覧のとおり、私はonSurfaceChanged()の最後にmodelviewマトリックスモードに戻って設定しています。 –

答えて

0

単純にzFarを上げて問題を解決しました。私はまだ1つのzFarがエミュレータで動作したが、デバイス上で動作しなかった理由について説明していません。

関連する問題