1

私はOpenGlにまったく慣れていないので、親切にしてください。私のアプリケーションでは、JPG と PNG のテクスチャを使用しています。HTC Desire (android 2.2) または Xperia x8 (android 2.1) ではすべて正常に表示されます。画面は次のとおりです: http://imageshack.us/photo/my-images/534/xperia.png/ )。しかし、Samsung Galaxy Tab 10.1 (android 3.2) や Samsung Galaxy S3 (android 4.x) などの新しいデバイスでは、JPG テクスチャは色で区切られていますか? およびシフト: http://imageshack.us/photo/my-images/855/samsungbs.png/ . それでも、PNG は常に正常に表示されます。

描画には GLSurfaceView を使用しています。テクスチャの作成を担当する私のコードは次のようになります。

gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[i]);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);
        if (bitmaps[i].hasAlpha()) {
            GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, bitmaps[i], 0);
        } else {
            GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGB, bitmaps[i], 0);
        }

「bitmaps[i].hasAlpha()」によって、指定されたビットマップが jpg か png かを区別しようとしています。どこが間違っているのでしょうか?

4

2 に答える 2

0

ジムバックありがとうございます。あなたが言ったように。一部のデバイスでは、jpgは誤って解釈される必要があり、RGBA形式である場合は「アルファなし」に分類されます。これは、ステートメントが不要であり、基本的なtexImage2Dメソッドを使用する方がよい場合です。

        gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[i]);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmaps[i], 0);

以前のogl構成では、テクスチャの色が正しく表示されないことがありました。以下は、すべてのデバイスで適切に機能する構成です。

    private void configureGL(GL10 gl) {
        gl.glDisable(GL10.GL_DITHER);
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
        gl.glClearColor(1, 0, 0, 1);
        gl.glEnable(GL10.GL_CULL_FACE);
        gl.glShadeModel(GL10.GL_SMOOTH);
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glViewport(0, 0, screenWidth, screenHeight);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluOrtho2D(gl, 0.0f, BASE_SCREEN_WIDTH, 0.0f, BASE_SCREEN_HEIGHT);
        gl.glEnable(GL10.GL_TEXTURE_2D);
        gl.glShadeModel(GL10.GL_FLAT);
        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
        gl.glEnable(GL10.GL_ALPHA_TEST);
        //that's a temporal hack below for removing white borders around textures (not a good practice :P)
        gl.glAlphaFunc(GL10.GL_GREATER, 0.4f); 
    }

同様の問題があるpplの場合:

以前は、独自の描画スレッドを使用して、構成を最初から作成していました。これにより、一部のデバイスで奇妙な色が発生し、この「ifaplha」ステートメントを使用するようになりました。今、私は実装されたレンダラー(「Androidワイヤレスアプリケーション開発、第2版」から取られたサンプル)でGLSurfaceViewを使用し、基本的なtexImage2Dは魅力のように機能します。

于 2012-09-24T17:48:45.583 に答える
0

これらは 2 の累乗のテクスチャではないと思いますか? もしそうなら、それが動作していないデバイスは、2 の累乗でないテクスチャを処理しない可能性があります。ここでは間違いなくアライメント/ピッチが進行中です。

于 2012-09-22T22:41:07.727 に答える