2011-12-17 28 views
3

私は、OpenGL(LWJGL)を使用して、JavaでのMinecraftのコピーを作成しようとしているのを超える白です。私が直面している問題は、私の2Dオーバーレイ(中間、メニューなどのクロスを目指す...)がすべて白であることです。ゲームの3D部分は素晴らしい作品です:各キューブにはそれぞれの面にテクスチャがあります。のOpenGL:2Dオーバーレイは、3Dシーン

しかし、私はオーバーレイを描画しようとすると、私が言ったように、すべてのテクスチャが白ですが、(それは透明な領域を持っているので)、私はそれの形状を見ることができます。私はそれの写真を追加します。

enter image description here (これは、インベントリことになっている)

あなたが見ることができるように、オーバーレイは完全に白です。そして、それは次のようになります。私はすでに時間のためのWebを検索してい

enter image description here

。解決策が見つからないようです。
は、これは私の狂気を駆動する...私はすでに3Dシーンの2Dオーバーレイを作成する方法の指示を探し、彼らはどちらか助けていません。ですから、私はStackOverflowに試してみましょう。

うまくいけば、誰かが私を助けることができますか? 私の質問と(うまくいけば)来る答えを読んでくれてありがとう!ここで

マルタイン

はコードです:

のイニシャライズのOpenGL(インスピレーションのうち、私は文字通りすべてのOpenGLの呼び出しをコピーしたオーバーレイを描画するためのマトリクスを設定

public void initOpenGL() throws IOException 
{ 
    // init OpenGL 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, 800, 600, 0, 1, 300); 
    glMatrixMode(GL_MODELVIEW); 

    float color = 0.9f; 

    glClearColor(color, color, color, color); 
    glEnable(GL_TEXTURE_2D); 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 

    glShadeModel(GL_FLAT); 
    glEnable(GL_DEPTH_TEST); 
    glDepthFunc(GL_LEQUAL); 

    glEnable(GL_LINE_SMOOTH); 
    glEnable(GL_CULL_FACE); 


    glEnable(GL_FOG); 
    glFog(GL_FOG_COLOR, MineCraft.wrapDirect(color, color, color, 1.0f)); 
    glFogi(GL_FOG_MODE, GL_LINEAR); 
    glFogf(GL_FOG_START, _configuration.getViewingDistance() * 0.8f); 
    glFogf(GL_FOG_END, _configuration.getViewingDistance()); 
    glFogi(NVFogDistance.GL_FOG_DISTANCE_MODE_NV, NVFogDistance.GL_EYE_RADIAL_NV); 
    glHint(GL_FOG_HINT, GL_NICEST); 

    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
} 

BlockMania(別のオープンソースのMineCraftコピー)からのこの方法のためには、素晴らしい作品です)

テクスチャ自体の描画
public void renderOverlay() 
{ 
    glMatrixMode(GL_PROJECTION); 
    glPushMatrix(); 
    glLoadIdentity(); 
    GLU.gluOrtho2D(0, conf.getWidth(), conf.getHeight(), 0); 
    glMatrixMode(GL_MODELVIEW); 
    glEnable(GL_COLOR_MATERIAL); 
    glPushMatrix(); 
    glLoadIdentity(); 

    glDisable(GL_CULL_FACE); 
    glDisable(GL_DEPTH_TEST); 
    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

    /** RENDER **/ 
    if (_activatedInventory != null) 
    { 
     _activatedInventory.renderInventory(); 
    } 

    glDisable(GL_BLEND); 
    glEnable(GL_DEPTH_TEST); 
    glEnable(GL_CULL_FACE); 

    glPopMatrix(); 
    glMatrixMode(GL_PROJECTION); 
    glPopMatrix(); 
    glMatrixMode(GL_MODELVIEW); 
} 

public void renderInventory() 
{ 
    Configuration conf = Game.getInstance().getConfiguration(); 

    glTranslatef(conf.getWidth()/2.0f, conf.getHeight()/2.0f, 0.0f); 

    glEnable(GL_TEXTURE_2D); 
    Texture tex = TextureStorage.getTexture("gui.inventory"); 
    tex.bind(); // newdawn.slick (same library for my whole program, so this works) 

    float hw = 170; // half width 
    float hh = 163; // half height 

    Vector2f _texPosUpLeft = new Vector2f(3, 0); 
    Vector2f _texPosDownRight = new Vector2f(_texPosUpLeft.x + hw, _texPosUpLeft.y + hh); 

    _texPosUpLeft.x /= tex.getTextureWidth(); 
    _texPosUpLeft.y /= tex.getTextureHeight(); 
    _texPosDownRight.x /= tex.getTextureWidth(); 
    _texPosDownRight.y /= tex.getTextureHeight(); 

    glColor3f(1, 1, 1); // Changes this doesn't make any effect 
    glBegin(GL_QUADS); 
    glTexCoord2f(_texPosUpLeft.x, _texPosUpLeft.y); 
    glVertex2f(-hw, -hh); 
    glTexCoord2f(_texPosDownRight.x, _texPosUpLeft.y); 
    glVertex2f(hw, -hh); 
    glTexCoord2f(_texPosDownRight.x, _texPosDownRight.y); 
    glVertex2f(hw, hh); 
    glTexCoord2f(_texPosUpLeft.x, _texPosDownRight.y); 
    glVertex2f(-hw, hh); 
    glEnd(); 
} 

(私が使用しているテクスチャパックはCUBISM1.00ですが)

答えて

3

は、私はそれを見つけました!

それは霧でした。 1つまたは別の理由で、オーバーレイが視界から外れていると考えられ、霧の色が表示されるように見えます。したがって、オーバーレイをレンダリングする前にフォグを無効にすると、それが解決されました。

glDisable(GL_FOG); 

/* Render overlay here */ 

glEnable(GL_FOG); 

これを読んでいる人がまだいる場合は、これはマトリックス乱用によるものか、この正常な動作ですか?

+0

あなたはいつものように天才です。 – YumYumYum

関連する問題