Hi!
Ich habe ein größeres 3D-Projekt, das bisher allerdings nur aus farbigen Blöcken und Formen besteht. Jetzt habe ich versucht Texturen einzubinden. Allerdings erscheinen sie nicht, obwohl sie anscheinend richtig geladen werden. (Ich habe es mit texture.getImageWidth() überprüft und es wurde die richtige Breite ausgegeben, also werden sie wohl richtig geladen)
Wenn ich z.B. versuche auf eine Würfel eine Textur zu zeichnen, funktioniert es nicht und der Würfel ist einfach weiß.
Ich habe bereits in einem seperaten Projekt einen drehenden Würfel mit einer Textur erstellt und dort funktioniert es einwandfrei, mein aktuelles Projekt ist allerdings bereits etwas umfangreicher und ich habe daher keine Ahnung woran genau es liegen könnte.
Ich habe bereits versucht .jpg und .png - Texturen zu laden,
herauszunehmen, und einige andere Dinge, allerdings ist das Ergebnis immer das gleiche: der Würfel bleibt weiß.
Wo könnte das Probelm liegen?
Hier ein paar Codeausschnitte:
OpenGL-Initialisierung: (ich vermute, dass hier das Problem liegt)
Textur wird geladen: (mit Slick)
Zeichenmethode des Würfels:
Ich habe ein größeres 3D-Projekt, das bisher allerdings nur aus farbigen Blöcken und Formen besteht. Jetzt habe ich versucht Texturen einzubinden. Allerdings erscheinen sie nicht, obwohl sie anscheinend richtig geladen werden. (Ich habe es mit texture.getImageWidth() überprüft und es wurde die richtige Breite ausgegeben, also werden sie wohl richtig geladen)
Wenn ich z.B. versuche auf eine Würfel eine Textur zu zeichnen, funktioniert es nicht und der Würfel ist einfach weiß.
Ich habe bereits in einem seperaten Projekt einen drehenden Würfel mit einer Textur erstellt und dort funktioniert es einwandfrei, mein aktuelles Projekt ist allerdings bereits etwas umfangreicher und ich habe daher keine Ahnung woran genau es liegen könnte.
Ich habe bereits versucht .jpg und .png - Texturen zu laden,
Java:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Wo könnte das Probelm liegen?
Hier ein paar Codeausschnitte:
OpenGL-Initialisierung: (ich vermute, dass hier das Problem liegt)
Java:
public void initOpenGL()
{
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix
// Calculate The Aspect Ratio Of The Window
GLU.gluPerspective(
45.0f,
(float) Display.getDisplayMode().getWidth() / (float) Display.getDisplayMode().getHeight(),
0.1f,
200.0f); //Renderweite
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}
Textur wird geladen: (mit Slick)
Java:
public Texture getTexture(String name)
{
Texture texture = null;
try
{
texture = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream("ressources/images/textures/glass1p2.png"));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return texture;
}
Zeichenmethode des Würfels:
Java:
@Override
public void drawOpenGL()
{
Color.white.bind();
texture.bind();
glBegin(GL_QUADS);
// Front Face
glTexCoord2f(0.0f, 0.0f);
glVertex3f(0, 0, getDeep());
glTexCoord2f(1.0f, 0.0f);
glVertex3f(getWidth(), 0, getDeep());
glTexCoord2f(1.0f, 1.0f);
glVertex3f(getWidth(), getHeight(), getDeep());
glTexCoord2f(0.0f, 1.0f);
glVertex3f(0, getHeight(), getDeep());
// Back Face
glTexCoord2f(1.0f, 0.0f);
glVertex3f(0, 0, 0);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(0, getHeight(), 0);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(getWidth(), getHeight(), 0);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(getWidth(), 0, 0);
// Top Face
glTexCoord2f(0.0f, 1.0f);
glVertex3f(0, getHeight(), 0);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(0, getHeight(), getDeep());
glTexCoord2f(1.0f, 0.0f);
glVertex3f(getWidth(), getHeight(), getDeep());
glTexCoord2f(1.0f, 1.0f);
glVertex3f(getWidth(), getHeight(), 0);
// Bottom Face
glTexCoord2f(1.0f, 1.0f);
glVertex3f(0, 0, 0);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(getWidth(), 0, 0);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(getWidth(), 0, getDeep());
glTexCoord2f(1.0f, 0.0f);
glVertex3f(0, 0, getDeep());
// Right face
glTexCoord2f(1.0f, 0.0f);
glVertex3f(getWidth(), 0, 0);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(getWidth(), getHeight(), 0);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(getWidth(), getHeight(), getDeep());
glTexCoord2f(0.0f, 0.0f);
glVertex3f(getWidth(), 0, getDeep());
// Left Face
glTexCoord2f(0.0f, 0.0f);
glVertex3f(0, 0, 0);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(0, 0, getDeep());
glTexCoord2f(1.0f, 1.0f);
glVertex3f(0, getHeight(), getDeep());
glTexCoord2f(0.0f, 1.0f);
glVertex3f(0, getHeight(), 0);
glEnd();
texture.release();
}