0

私はかなり検索しましたが、同様の問題と解決策はすべてまだうまくいきませんでした。だから私は誰かが私の問題を認識してくれることを願っています

問題の説明:
私がやりたいことは、レンダリングしているテクスチャと交換することです。アプリケーションの起動時にテクスチャをロードすると、うまくレンダリングされます。後でそれを置き換えたいと思い、同じロード関数を再度呼び出して、新しいテクスチャ ID を生成します。新しいテクスチャ ID でレンダリングすると、モデルが完全に黒くなるという問題が発生します。

したがって、以下のコードを実行すると、上記のことが起こります。

Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), 
    R.drawable.sphere_map1);
currentTexture = TextureHelper.loadTextureToOGL(bmp);

完全に黒いテクスチャで問題が発生します。

ここでは、テクスチャをロードしてモデルを描画するために使用する重要な関数をいくつか紹介します。追加のコードが必要な場合はお知らせください。これは私の最初の投稿であるため、投稿の構造に関する推奨事項もお気軽にお寄せください。

よろしくお願いします!

 public static int loadTextureToOGL(Bitmap bitmap) {
    int texId[] = { -1 };
    GLES20.glGenTextures(1, texId, 0);
    int textureId = texId[0];
    glBindTexture(GLES20.GL_TEXTURE_2D, textureId);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, mMinFilter);
    glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, mMaxFilter);
    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D,0, GL_RGBA, bitmap, 0);
    GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);

    GeneralUtil.printGLErrorInHex();
    bitmap.recycle();

    return textureId;
}

public void draw(float[] mvp) {
    glUseProgram(mProgram);

    glEnableVertexAttribArray(mPositionHandle);
    glEnableVertexAttribArray(mNormalHandle);
    glEnableVertexAttribArray(mTexCoordHandle);

    GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, currentTexture);
    glUniform1i(mEnvTex0Handle, 0);

    glUniformMatrix4fv(mMVPHandle, 1, false, mvp, 0);

    glUniform3f(mColorHandle, red, green, blue);
    glUniform1f(mAttSpecularHandle, attSpecular);
    glUniform1f(mAttDiffuseHandle, attDiffuse);
    glUniform1f(mAttAmbientHandle, attAmbient);

    GeneralUtil.printGLErrorInHex();
    if (model != null) {
        glDrawArrays(GL_TRIANGLES, 0, model.getmNFaces() * 3);
    }
}
4

1 に答える 1

0

だから私は自分の問題を見つけたと思います。

glTexImage 呼び出しを GL スレッドから実行する代わりに、UI スレッドから実行しました。GLスレッドを独自に作成していることに気づきませんでした。

于 2012-09-03T19:43:14.697 に答える