# slick lwjgl text darstellen mit UnicodeFont funktoniert nicht?



## coolian (28. Sep 2019)

versuche grade text darzustellen mithilfe von slick auf ein lwjgl 2 display mit einem UnicodeFont der text erscheint aber nicht es giebt aber auch keine fehler meldung oder so der code um den font zu laden:

```
UnicodeFont font = null;
        try {
            font = new UnicodeFont(new java.awt.Font("Times New Roman", java.awt.Font.PLAIN, 24));
            font.getEffects().add(new ColorEffect(java.awt.Color.white));
            font.addAsciiGlyphs();
            font.loadGlyphs();
        } catch (SlickException e) {
            e.printStackTrace();
        }
```

und hier der rest der main klasse:

```
package main;

import models.RawModel;
import models.TexturedModel;

import java.awt.Color;
import java.awt.Font;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.vector.Vector2f;
import org.lwjgl.util.vector.Vector3f;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.TrueTypeFont;
import org.newdawn.slick.UnicodeFont;
import org.newdawn.slick.font.effects.ColorEffect;

import renderEngine.DisplayManager;
import renderEngine.Loader;
import renderEngine.MasterRenderer;
import renderEngine.OBJLoader;
import shaders.StaticShader;
import terrain.Terrain;
import textures.ModelTexture;
import textures.TerrainTexture;
import textures.TerrainTexturePack;
import entities.Camera;
import entities.Entity;
import entities.Light;
import entities.Player;
import guis.FontLoader;
import guis.GuiRenderer;
import guis.GuiTexture;

public class Main {
    
    private static final String HEIGHT_MAP = "heightmap";
    
    public static void main(String[] args) {
        
        
        
        DisplayManager.createDisplay();
        Loader loader = new Loader();
        
        //*******************************TERRIAN TEXTURE STUFF*****************
        
        TerrainTexture backgroundTexture = new TerrainTexture(loader.loadTexture("grassy"));
        TerrainTexture rTexture = new TerrainTexture(loader.loadTexture("dirt"));
        TerrainTexture gTexture = new TerrainTexture(loader.loadTexture("pinkFlowers"));
        TerrainTexture bTexture = new TerrainTexture(loader.loadTexture("path"));
        
        TerrainTexturePack texturePack = new TerrainTexturePack(backgroundTexture, rTexture,
                gTexture, bTexture);
        TerrainTexture blendMap = new TerrainTexture(loader.loadTexture("blendMap"));
        
        //*********************************************************************
        Terrain terrain = new Terrain(0, -1, loader, texturePack, blendMap, HEIGHT_MAP);
        
        RawModel model = OBJLoader.loadObjModel("tree", loader);
        
        ModelTexture fernTextureAtlas = new ModelTexture(loader.loadTexture("fern"));
        fernTextureAtlas.setNumberOfRows(2);
        
        TexturedModel staticModel = new TexturedModel(model, new ModelTexture(loader.loadTexture("tree")));
        TexturedModel grass = new TexturedModel(OBJLoader.loadObjModel("grassModel", loader), new ModelTexture(loader.loadTexture("grassTexture")));
        grass.getTexture().setHasTransparency(true);
        grass.getTexture().useFakeLighting(true);
        TexturedModel fern = new TexturedModel(OBJLoader.loadObjModel("fern", loader), fernTextureAtlas);
        
        List<GuiTexture> guis = new ArrayList<GuiTexture>();
        List<Entity> entities = new ArrayList<Entity>();
        
        GuiTexture gui = new GuiTexture(loader.loadTexture("box"), new Vector2f(0.5f, 0.5f), new Vector2f(0.25f, 0.25f));
        
        Random random = new Random();
        for(int i = 0; i < 400; i++) {
            float x = random.nextFloat() * 800 - 400;
            float z = random.nextFloat() * -600;
            float y = terrain.getHeightOfTerrain(x, z);
            entities.add(new Entity(staticModel, new Vector3f(x, y, z), 0, 0, 0, 3));
            x = random.nextFloat() * 800 - 400;
            z = random.nextFloat() * -600;
            y = terrain.getHeightOfTerrain(x, z);
            entities.add(new Entity(grass, new Vector3f(x, y, z), 0, 0, 0, 1));
            x = random.nextFloat() * 800 - 400;
            z = random.nextFloat() * -600;
            y = terrain.getHeightOfTerrain(x, z);
            entities.add(new Entity(fern, random.nextInt(4), new Vector3f(x, y, z), 0, 0, 0, 0.6f));
        }
        
        Light light = new Light(new Vector3f(0000, 10000, -10000), new Vector3f(1, 1, 1));
        
        
        /*Terrain terrain2 = new Terrain(-1, 0, loader, texturePack, blendMap, HEIGHT_MAP);
        Terrain terrain3 = new Terrain(-1, 0, loader, texturePack, blendMap, HEIGHT_MAP);
        Terrain terrain4 = new Terrain(0, -1, loader, texturePack, blendMap, HEIGHT_MAP);
        Terrain terrain5 = new Terrain(0, 1, loader, texturePack, blendMap, HEIGHT_MAP);
        Terrain terrain6 = new Terrain(0, 1, loader, texturePack, blendMap, HEIGHT_MAP);
        Terrain terrain7 = new Terrain(1, 0, loader, texturePack, blendMap, HEIGHT_MAP);
        Terrain terrain8 = new Terrain(0, 0, loader, texturePack, blendMap, HEIGHT_MAP);
        Terrain terrain9 = new Terrain(1, 1, loader, texturePack, blendMap, HEIGHT_MAP);
        Terrain terrain10 = new Terrain(-1, -1, loader, texturePack, blendMap, HEIGHT_MAP);*/
        UnicodeFont font = null;
        try {
            font = new UnicodeFont(new java.awt.Font("Times New Roman", java.awt.Font.PLAIN, 24));
            font.getEffects().add(new ColorEffect(java.awt.Color.white));
            font.addAsciiGlyphs();
            font.loadGlyphs();
        } catch (SlickException e) {
            e.printStackTrace();
        }
        
        GuiRenderer guiRenderer = new GuiRenderer(loader);
        MasterRenderer renderer = new MasterRenderer();
        
        RawModel playerModel = OBJLoader.loadObjModel("person", loader);
        TexturedModel playerTM = new TexturedModel(playerModel, new ModelTexture(loader.loadTexture("playerTexture")));
        
        Player player = new Player(playerTM, new Vector3f(100, 0, -50), 0, 0, 0, 1);
        Camera camera = new Camera(player);
        
        while(!Display.isCloseRequested()){
            camera.move();
            player.move(terrain);
            
            renderer.processTerrain(terrain);
            /*renderer.processTerrain(terrain2);
            renderer.processTerrain(terrain3);
            renderer.processTerrain(terrain4);
            renderer.processTerrain(terrain5);
            renderer.processTerrain(terrain6);
            renderer.processTerrain(terrain7);
            renderer.processTerrain(terrain8);
            renderer.processTerrain(terrain9);
            renderer.processTerrain(terrain10);*/
            
            renderer.processEntity(player);
            
            for(Entity entity:entities) {
                renderer.processEntity(entity);
            }
            
            renderer.render(light, camera);
            guiRenderer.render(guis);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
            GL11.glDisable(GL11.GL_DEPTH_TEST);
            font.drawString(50, 50, "test");
            GL11.glEnable(GL11.GL_DEPTH_TEST);
            GL11.glDisable(GL11.GL_BLEND);
            DisplayManager.updateDisplay();
        }
        guiRenderer.cleanUp();
        renderer.cleanUp();
        loader.cleanUp();
        DisplayManager.closeDisplay();
    }
}
```

mit font.drawString(50, 50, "test"); sollte der text eig. gedrawt werden tut es aber nicht warum? b.z welche lösung könnte es dafür geben
mit TrueTypeFont btw das selbe problem
hoffe irgendwer kann mir helfen
LG coolian


----------



## Xyz1 (28. Sep 2019)

wo wird das aufgerufen? Hast mal die Koords geändert?


----------



## coolian (28. Sep 2019)

das wird in der main klasse auf zeile 107 - 115 aufgerufen direkt unter dem erstellen der terrains wovon 9 auskommentiert sind. die koords hatte ich auf 100 und 10 ausprobiert mit dem selben ergebnis und 0.5f hab ich grade auch ausprobiert mit selben ergebnis


----------



## Xyz1 (28. Sep 2019)

Dann weiß ich auch nich


----------



## coolian (28. Sep 2019)

ich versuche einfach mal ein neues projekt zu erstellen und da einfach nur den code für text rendering rein tun


----------



## coolian (28. Sep 2019)

coolian hat gesagt.:


> ich versuche einfach mal ein neues projekt zu erstellen und da einfach nur den code für text rendering rein tun



ok funktoniert weiß aber nicht warum habe diesne code benutzt:

```
package main;

import static org.lwjgl.opengl.GL11.*;

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.UnicodeFont;
import org.newdawn.slick.font.effects.ColorEffect;

public class Main {
    static UnicodeFont uf = null;


    public static void initGL() {
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0, 640, 480, 0, 1, -1);
        glMatrixMode(GL_MODELVIEW);

        glEnable(GL_TEXTURE_2D);
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    }

    @SuppressWarnings("unchecked")
    public static void initFont(int size, boolean bold, boolean italic) {
        try {
            uf = new UnicodeFont("res/sans.TTF", size, bold, italic);
            uf.addAsciiGlyphs();
            uf.getEffects().add(new ColorEffect(java.awt.Color.white));
            uf.loadGlyphs();
        } catch (SlickException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        try {
            Display.setDisplayMode(new DisplayMode(640, 480));
            Display.setTitle("Text Drawing!");
            Display.setResizable(false);
            Display.create();
        } catch (LWJGLException e) {

        }

        initGL();
        initFont(100, false, false);

        while (!Display.isCloseRequested()) {

            glClear(GL_COLOR_BUFFER_BIT);

            uf.drawString(10, 10, "Sweet Text");

            Display.update();
            Display.sync(60);
        }

        System.exit(0);

    }
}
```

welche ich von hier:https://stackoverflow.com/questions/14919364/rendering-text-with-slick2d-inside-a-lwjgl-window 
hab der leicht anders ist aber auch wenn ich den code statt den den ich vorher hatte einsetze geht es nicht nur in dem test projekt


----------



## coolian (28. Sep 2019)

hab halt jetzt keine ahnung wie ich das hin bekomm das das auch meinem nicht test projekt funktoniert


----------



## Xyz1 (28. Sep 2019)

Kann an den Koords liegen, der View, dem Eye, der Projektion, der Reihenfolge usw., aber irgendwie sieht Deine update Schleife nicht richtig aus.
glEnable(GL_TEXTURE_2D); steht oben auch nich...


----------



## coolian (28. Sep 2019)

deswegen hab ich auch noch das hier probiert in dem update loop:

```
GL11.glEnable(GL_TEXTURE_2D);
            GL11.glEnable(GL_BLEND);
            GL11.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
            uf.drawString(10, 10, "Sweet Text");
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            GL11.glDisable(GL11.GL_BLEND);
```

und das hier:

```
glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0, 640, 480, 0, 1, -1);
        glMatrixMode(GL_MODELVIEW);
```

direkt nach dem erstellen von dem display hinzutun tut auch nichts


----------



## coolian (28. Sep 2019)

geht auch nicht wenn ich offizielen example code in meinen code intregriere
*http://ninjacave.com/slickutil3 *


----------



## coolian (29. Sep 2019)

nichts funkt hab keine lust mehr mich jetzt damit zu beschäftigen gehe jetzt skyrim zocken eventuell guck ich später nochmal rein aber es ist kurz nach mitternacht also keien ahnung


----------



## Xyz1 (29. Sep 2019)

coolian hat gesagt.:


> gehe jetzt skyrim zocken


Viel Spaß, Steam ist gerade wieder online....


----------

