Ich habe ein einfaches Spiel erstellt und meine Pixel erscheinen verzerrt (Bild). Es ist nicht perfekt.
Ich habe keine Erfahrung mit dieser Bibliothek und habe zwei Tutorials zum Laden von Texturen und zum Einrichten des Bildschirms befolgt. Und jetzt habe ich ein Problem damit. Es funktioniert zwar bei vergrößerten Texturen, aber bei kleinen Räumen funktioniert es nicht.
Methode zum Zeichnen von Texturen: (unten) Hier liegt meiner Meinung nach das Problem, aber ich weiß nicht, wo. Ich zeichne ein Quadrat mit einer Textur basierend auf Seitenverhältnis und Parametern.
ublic static void image(DisplayScreen screen, Texture texture, float x1, float y1, float width, float height) {
GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
texture.bind();
int screenWidth = screen.getWidth();
int screenHeight = screen.getHeight();
glEnable(GL_TEXTURE);
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
float extendedX = (x1 * screenHeight) / screenWidth + (width * screenHeight) / screenWidth;
glTexCoord2f(0.0f, .0f);
GL11.glVertex2f((x1 * screenHeight) / screenWidth, y1+height);
GL11.glTexCoord2f(1.0f, 0.0f);
GL11.glVertex2f(extendedX, y1+height);
GL11.glTexCoord2f(1.0f, 1.0f);
GL11.glVertex2f(extendedX, y1);
GL11.glTexCoord2f(0.0f, 1.0f);
GL11.glVertex2f((x1 * screenHeight) / screenWidth, y1);
GL11.glEnd();
}
Das habe ich aus einem Tutorial:
public Texture(String filename) {
BufferedImage bi;
try {
bi = ImageIO.read(new File(filename));
width = bi.getWidth();
height = bi.getHeight();
int[] pixels_raw;
pixels_raw = bi.getRGB(0, 0, width, height, null, 0, width);
ByteBuffer pixels = BufferUtils.createByteBuffer(width*height*4);
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
int pixel = pixels_raw[i * height + j];
pixels.put((byte) ((pixel >> 16) & 0xFF)); //RED
pixels.put((byte) ((pixel >> 8) & 0xFF)); //GREEN
pixels.put((byte) (pixel & 0xFF)); //BLUE
pixels.put((byte) ((pixel >> 24) & 0xFF)); //ALPHA
}
}
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
pixels.flip();
id = glGenTextures();
bind();
glOrtho(2, 2, 2, 2, 2, 2);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
} catch(Exception e) {
e.printStackTrace();
}
Ich habe das hinzugefügt, weil ich dachte, es würde etwas bewirken: (es hat nicht viel bewirkt und das Problem ist immer noch da)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_UNPACK_ALIGNMENT, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Verzerrte Pixeldarstellung in LWJGL-Texturen ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post