2012-03-08 32 views
0

まず第一に、これは重複した質問であり、別の質問をチェックしますが、助けにはなりませんでした。私はキャンバスシステムからGL10に自分のアンドロイドゲームを変換しようとしています。私はたくさんのグーグル・プレイヤーの後、演奏家のためにそれをすることにしました。とにかく、テクスチャを読み込んで描画するクラスを作成しようとしました。問題は、ブルースクリーン上に全体的に黒く表示されるテクスチャです。 私は確信していません私はメッシュや何かを作成せずにテクスチャを描画することができますが、これは私がやろうとしているものです。自分のサイズで2Dテクスチャを描画しようとしているだけなので、メッシュは必要ありません。ここに私のコードは次のとおりです。OpenGL es glDrawTexfOES()2Dテクスチャはレンダリングされません

onDrawFrame

@Override 
public void onDrawFrame(GL10 gl) { 
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
    gl.glLoadIdentity(); 
    //gl.glTranslatef(0, 0, -4); 
     **CODE B DRAWING** 
     // bgNightID is the ID of texture was loaded. 
     textureStorage.DrawTexture(bgNightID, 50,50,0,(short)4000,(short)638); 
     // Drawing background right here which is shows up black. 
} 

CODE

@Override 
    public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
     gl.glClearColor(0.0f, 0.0f, 1.0f, 0.2f); 
     gl.glClearDepthf(1.0f); 
     gl.glViewport(0, 0, 800, 480); 

     gl.glShadeModel(GL10.GL_SMOOTH); 
     gl.glEnable(GL10.GL_DEPTH_TEST); 
     gl.glEnable(GL10.GL_TEXTURE_2D); 
     gl.glDepthFunc(GL10.GL_LEQUAL); 
     gl.glMatrixMode(GL10.GL_PROJECTION); 
     gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); 
     //gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); 
     gl.glLoadIdentity(); 
     // This is the class where I load and draw my textures. 
     textureStorage = new TextureStorage(gl); 
     //I'm loading a texture.  **CODE A TEXTURE LOADER** 
     bgNightID = textureStorage.Load(BitmapFactory.decodeResource(context.getResources(),R.drawable.bg_game)); 
     //This is where I load my units variables. Nothing to do with it. 
     RenderingFunctions.InitUnits(this); 
    } 

をonSurfaceCreatedテクスチャLOADER

public int glLoad(Bitmap bitmap){ 
    if (gl == null){ 
     Log.e(TAG, "Failed to load resource. Context/GL is NULL");return -1; 
    } 
    int textureName = -1; 
    gl.glGenTextures(1, TexIDStorage, 0); 
    textureName = TexIDStorage[0]; 

    Log.d(TAG, "Generated texture: " + textureName); 
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureName); 

    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); 
    //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_CLAMP_TO_EDGE); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); 
    gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE); 

    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 

    int error = gl.glGetError(); 
    if (error != GL10.GL_NO_ERROR){ 
     Log.e(TAG, "GL Texture Load Error: " + error); 
    }else 
     Log.d(TAG, "Loaded texture: " + textureName); 
    return textureName; 
} 

CODEのB描画

public void DrawTexture(int TexutreID, float X, float Y, float Z, short Width, short Height){ 
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
    //gl.glColor4f(1.0f, 1.0f, 1.0f, 0.5f); 
    gl.glBindTexture(GL10.GL_TEXTURE_2D, TexIDStorage[TexutreID]); 
    ((GL11Ext) gl).glDrawTexfOES(X, Y, Z, Width, Height); 
} 

私はGL10へば完全に新たなんだと、問題が何であるかを把握することはできません、それは私が欠けているものです。だから誰かが私を助けることができるなら、それは素晴らしいだろう。 givim時間ありがとう!

答えて

2

私はテクスチャの幅と高さがproperyを表示する2 INORDERの力でなければならないことをかなり確信している:3210はまた、私はglTexEnvへの呼び出しを行うことはありません。ビットマップを2の累乗になるように拡大縮小してみてください。

+0

よく努力した後、私はあなたが大事だと考えました。私は2つの問題のこの力のための機会を与えなかったし、これのために私は私の人生の1日を失った。今それは完璧に動作します。 –

1

まあ、私はどちらかの主要なOpenGLの専門家ではないんだけど、私はあなたに何を参照してくださいからは少し奇妙だ唯一のことは、あなたがあなたのイメージ、つまりこの部分をロードする方法ですコード:

bgNightID = textureStorage.Load(BitmapFactory.decodeResource(context.getResources(),R.drawable.bg_game)); 

何IちょうどそのようなBitmapインスタンスを作成しているん:その後、

InputStream is = appContext.getResources().openRawResource(R.drawable.whateverId); 
Bitmap bitmap = = BitmapFactory.decodeStream(is); 

そしてGLUtilsにそれを渡す:

GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap , 0); 
//I don't do this: 
gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE); 
+0

bgNightID = textureStorage.Load(BitmapFactory.decodeResource(context.getResources()、R.drawable.bg_game)); ここでは、同じことをするローダー関数にビットマップを送ります(私はその関数をCODE Aでも共有しましたが)とにかくあなたのコードを試してみるかもしれません。 –

+0

申し訳ありませんが、私はあなたのコメントを理解していません。それでは、質問の本体にOpenGLの状態を呼び出して設定する正しい順序を入れておく質問があります。コードはJOGl用ですが、openGlの呼び出しはAndroidの場合と同じです:http://stackoverflow.com/questions/9500905/opengl-texture-colors-are-wrong。すべてを適切な順序で設定していること、そして何も忘れていないことを確認してください。 –

+0

ああ、私は問題があると思う。 glDrawTexfOESを使用します。私はそれが本当に何をしているのかわかりません(OpenGLのドキュメントでは見つけられません)。クワッドを作成し、テクスチャをバインドし、クワッドを描画します。以前のコメントにリンクされている質問で行われたように。 –

関連する問題