# OpenGL Bild wird nicht richtig angezeigt



## javafreak91 (17. Aug 2017)

Hallo zusammen,
Ich programmiere mit OpenGL das Spiel TicTacToe und
habe folgendes Problem. Mein Frame ist 800x800 gross.
Wenn ich auf das Frame ein Bild zeichne, wird es zwar
gezeichnet aber nicht in der richtigen Grösse. Woran
könnte das liegen? 
Ps.: Im Anhang befindet sich ein Screenshoot von meinem Program.
Main.java:

```
import static Display.GUI.*;
import org.lwjgl.opengl.Display;
import Grid.Grid;

public class Main{
    private final int FPS = 120;
    public Main(){
        launchGame();//siehe GUI.java
        Grid grid = new Grid(quickLoad("background"));
        while(!Display.isCloseRequested()){
            grid.draw(); 
            Display.update();
            Display.sync(FPS);
        }
        Display.destroy();
    }
    public static void main(String[] args){
        new Main();
    }
```

GUI.java:

```
public class GUI{

    public final static int WIDTH = 800;
    public final static int HEIGHT = 800;
    public final static int SCALE = 1;
   
    public static void launchGame(){
        Display.setTitle("TicTacToe");
        try {
            Display.setDisplayMode(new DisplayMode(WIDTH * SCALE, HEIGHT * SCALE));
            Display.create();
        } catch (LWJGLException e) {
            e.printStackTrace();
        }
       
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0, WIDTH * SCALE, HEIGHT * SCALE, 0, 1, -1);
        glMatrixMode(GL_MODELVIEW);
        glEnable(GL_TEXTURE_2D);
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
       
    }   
    public static void drawTexture(Texture tex, float x, float y, float width, float height){
        tex.bind();
        glTranslatef(x, y, 0);
        glBegin(GL_QUADS);
        glTexCoord2f(0, 0);
        glVertex2f(0, 0);
        glTexCoord2f(1, 0);
        glVertex2f(width, 0);
        glTexCoord2f(1, 1);
        glVertex2f(width, height);
        glTexCoord2f(0, 1);
        glVertex2f(0, height);
        glEnd();
        glLoadIdentity();
    }
    public static Texture quickLoad(String name){
        Texture tex = null;
        tex = loadTexture("res/" + name + ".png", "PNG");
        return tex;
    }
```
Und zuletzt Grid.java:

```
public class Grid{
   private Texture texture;
   private final int X = 0, Y = 0;
   public Grid(Texture texture){
       this.texture = texture;
   }
   public void draw(){
       drawTexture(texture, X, Y, WIDTH, HEIGHT);//siehe GUI.java
   }
}
```


----------



## javafreak91 (18. Aug 2017)

Na gut... Ich glaube ich weiss jetzt warum das nicht klappt. Um den Code zu testen habe ich eine neue Methode geschrieben, die einfach nur ein Quadrat aufs Display zeichnet.
Code:

```
public static void drawQuad(float x, float y, float width, float height){
        glBegin(GL_QUADS);
        glVertex2f(x * SCALE, y * SCALE); //top left
        glVertex2f((x + width) * SCALE, y * SCALE);  //top right
        glVertex2f((x + width) * SCALE, (y + height) * SCALE);  //bottom right
        glVertex2f(x * SCALE, (y + height) * SCALE);  //bottom left
        glEnd();
    }
```
Und das Ergebnis war so wie ichs mir gedacht habe. Ich hatte ein Quadrat, welches so gross war wie mein Frame.
Also.... Mein Bild wird füllt das Quadrat nicht aus. Ich muss nun rausfinden, wie ich das Bild ausstrecken kann.
Danke trotzdem...


----------



## javafreak91 (18. Aug 2017)

Alles klar... Für diejenigen, die das selbe Problem haben... Die Lösung ist sehr einfach.
Ihr müsst die drawTexture Methode anpassen und zwar so:

```
public static void drawTexture(Texture tex, float x, float y, float width, float height){
        tex.bind();
        glTranslatef(x, y, 0);
        glBegin(GL_QUADS);
        glTexCoord2f(0, 0);
        glVertex2f(0, 0);
        glTexCoord2f(1, 0);
        glVertex2f(tex.getTextureWidth(), 0);
        glTexCoord2f(1, 1);
        glVertex2f(tex.getTextureWidth(), tex.getTextureHeight());
        glTexCoord2f(0, 1);
        glVertex2f(0, tex.getTextureHeight());
        glEnd();
        glLoadIdentity();
    }
```
Ihr ersetzt width bzw. height durch tex.getTextureWidth(), and ....Height(). Das wars


----------

