Slick Texture laden Fehler

CookieSoft

Mitglied
Hallo,
ich habe da ein Problem, ich habe ein Bild:
bild.jpg

[10x10px](In Photoshop geladen)
So jetzt habe ich die Textur in mein Spiel geladen und wenn ichs starte sieht das so aus:
fehler.jpg

So lade ich die Textur:
Java:
public class Textures {
    public static Texture getTexture(String file){
        try {
            return TextureLoader.getTexture("PNG", new FileInputStream("res/" + file + ".png"));
        } catch (IOException ex) {
            Logger.getLogger(Textures.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
}
Und so zeig ich es an:
Java:
Texture heart = Textures.getTexture("heart");
                
                heart.bind();
                
                glBegin(GL_QUADS);
                  glTexCoord2f(0, 0);
                  glVertex2f(10, 10);
                  glTexCoord2f(heart.getTextureWidth(), 0);
                  glVertex2f(200, 10);
                  glTexCoord2f(heart.getTextureWidth(), heart.getTextureHeight());
                  glVertex2f(200, 200);
                  glTexCoord2f(0, heart.getTextureHeight());
                  glVertex2f(10, 200);
                glEnd();
Hab schon ein wenig gegooglet hab aber keine Antwort gefunden. Hoffe jemand kann mir helfen!:toll:
 
Naja, deine Textur ist kleiner als das Quad auf dem es gezeichnet wird. Somit wird die Textur einfach wiederholt. Ich meine man kann SLICK auch sagen, dass es nicht wiederholt werden soll.
 
Zwar kenn ich mich mit Slick nicht aus, aber bei der LWJGL gibt man mit
Code:
glTexCoord2f(float x, float y);
relative Koordinaten an, also wäre 1.0f sozusagen 100% der Länge.
 
Naja aber die Textur wird auch falschrum angezeigt... Und wie macht man es, dass sich die Textur nicht wiederholt?
Und wie ihr seht ist die Textur auch abgeschnitten.
 
Zuletzt bearbeitet:
Wie JCODA bereits gesagt hat: bisher zeichnest du die Textur heart.getTextureWidth() * heart.getTextureHeight() mal. Die Texturkoordinaten werden bei OpenGL nicht in Pixeln, sondern relativ angegeben. Wenn du das Bild nur einmal zeichnen willst, müsste es so aussehen:
Java:
Texture heart = Textures.getTexture("heart");
                
                heart.bind();
                
                glBegin(GL_QUADS);
                  glTexCoord2f(0, 0);
                  glVertex2f(10, 10);
                  glTexCoord2f(1, 0);
                  glVertex2f(200, 10);
                  glTexCoord2f(1, 1);
                  glVertex2f(200, 200);
                  glTexCoord2f(0, 1);
                  glVertex2f(10, 200);
                glEnd();

Damit sollte das mehrfach zeichnen und das abgeschnitten-sein behoben sein, wenn es noch falschrum ist, musst du einfach
glTexCoord2f(1, 0);
und
glTexCoord2f(0, 1);
vertauschen.
 
Zuletzt bearbeitet:
Danke, ich hab grad auch eine Möglichkeit gefunden. Ich habe zuerst, damit die Textur nicht so unscharf ist ein
Java:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
eingefügt und dann eben mit heart.getWidth() und heart.getHeight() gearbeitet.
 

Zurück
Oben