1

画面にポリゴンの束を描画する非常に単純なGLRendererサブクラスがあります。2.1がインストールされているNexusOneでは、期待どおりの結果が得られます。1.6がインストールされているG1では、glClearColorのみが表示されます。色を変更すると、onDrawFrame関数が少なくとも部分的に機能していることがわかります。

良い説明がわからないので、onDrawFrameコードを貼り付けています。

public void onDrawFrame(GL10 gl) {
    gl.glClearColor(1.0f, 1.00f, 1.0f, 1.0f);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

    gl.glLoadIdentity();
    gl.glScalef(zoomLevel, zoomLevel, 1.0f);
    gl.glTranslatef(offsetX, offsetY, -1);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, boothVerticies);
    int i = 0;
    for (Polygon b : allPolygons) {
        if (b.indicies != null) {
            gl.glColor4f(0.6f, 0.6f, 0.6f, 1.0f);
            gl.glDrawElements(GL10.GL_TRIANGLE_FAN, b.numberOfVerticies, GL10.GL_UNSIGNED_SHORT, b.indicies);
            gl.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
            gl.glDrawElements(GL10.GL_LINE_LOOP, b.numberOfVerticies, GL10.GL_UNSIGNED_SHORT, b.indicies);
            if (i++ > 20) break;
        }
    }
}

私のポリゴン構造にはインデックスと呼ばれるShortBufferがあり、numberOfVerticiesはポリゴン内のポイントの数を追跡します。

これが私のNexusOneでうまく機能するのに、G1ではうまく機能しない理由を誰かが知っていますか?

4

1 に答える 1

4

この問題は、Nexus One (または 2.1/2.2) では GL_VERTEX_ARRAY がデフォルトで有効になっているのに、G1 ではデフォルトで無効になっていることが原因で発生しました。修正するには、次の呼び出しを追加するだけです。

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
于 2010-05-24T17:40:49.830 に答える