私は、OpenGL(LWJGL)を使用して、JavaでのMinecraftのコピーを作成しようとしているのを超える白です。私が直面している問題は、私の2Dオーバーレイ(中間、メニューなどのクロスを目指す...)がすべて白であることです。ゲームの3D部分は素晴らしい作品です:各キューブにはそれぞれの面にテクスチャがあります。のOpenGL:2Dオーバーレイは、3Dシーン
しかし、私はオーバーレイを描画しようとすると、私が言ったように、すべてのテクスチャが白ですが、(それは透明な領域を持っているので)、私はそれの形状を見ることができます。私はそれの写真を追加します。
(これは、インベントリことになっている)
あなたが見ることができるように、オーバーレイは完全に白です。そして、それは次のようになります。私はすでに時間のためのWebを検索してい
。解決策が見つからないようです。
は、これは私の狂気を駆動する...私はすでに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ですが)
あなたはいつものように天才です。 – YumYumYum