lwjgl Texturen werden nicht gezeichnet

tdc

Bekanntes Mitglied
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,
Java:
glEnable(GL_BLEND);
    	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
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)
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();
	}
 

Kr0e

Gesperrter Benutzer
WAs genau macht Texture.release() ?? Das klingt für mich nach Textur löschen ...

DOC von Slick:

release()
Destroy the texture reference
 

tdc

Bekanntes Mitglied
Oh, als ich das gemacht hab war ich bereits vollkommen verzweifelt und hab einfach rumprobiert. :D

Nein, daran liegt es definitiv nicht, auch wenn ich es rausmache verändert sich nichts.
 

Kr0e

Gesperrter Benutzer
DAnn ahst du wenigstens schonmal eine Fehlerquelle ausgeschlossen. Der Code scheint ansich korrekt zu sein, obwohl ich das schon öfter gehört. Also in Bezug auf Slick + TExtures. OpenGL ist manchmal etwas haarig auf den Zähnen. Bei Texturen müssen auch die Filter + Wrap - Methoden angeben werden, auch wenn das eigentlcih der TExtureloader von Slick erledigen sollte.
 

tdc

Bekanntes Mitglied
Bei Texturen müssen auch die Filter + Wrap - Methoden angeben werden, auch wenn das eigentlcih der TExtureloader von Slick erledigen sollte.

Ähm.... was? :)

Ohne genau zu wissen was du meinst: soll ich das Binden der Texturen (texture.bind()) nicht über Slick sondern über OpenGL machen? Oder wie meinst du das?
 

tdc

Bekanntes Mitglied
Okay, danke erstmal, ich werde mir das in den nächsten Tagen mal anschauen...



EDIT:

So, ich habe mir die Seiten jetzt mal genau angesehen. Zumindest die erste hat mir bedingt weitergeholfen. Diese "Angaben" (GL_NEAREST, etc.) kann man auch bei dem Laden der Textur über Slick angeben:
Java:
private void loadTexture(String name, String datatype)
	{
		try
		{
			texture = TextureLoader.getTexture(datatype, new FileInputStream(new File("").getAbsolutePath()+"/src/ressources/images/textures/"+name),GL_NEAREST);
			//unsauberes Laden :D - ist nur zum Texten
		}
		catch (FileNotFoundException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
    }
Ich habe mal ein paar davon ausprobiert, die Textur wird aber leider immer noch nicht geladen.


Der Quellcode beim 2. Link ist leider in C und bisher habe ich noch nicht ganz hinbekommen, den Quellcode in Java umzuschreiben. Mein Problem ist das geladene Bild in einen IntBuffer zu bekommen. Ich habe zwar diese Anleitung gefunden, allerdings funktioniert bei mir
Java:
DataBuffer db = img.getRaster().getDataBuffer();
byte[] tmp = (DataBufferByte)db.getData();
nicht, bzw. es existiert keine Methode getData(). ???:L
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Es wäre wohl
byte[] tmp = ((DataBufferByte)db).getData();
(Klammern!) aber das ist gefährlich, wenn der Bildtyp nicht passt fliegt eine ClassCastException.

Aber darum ging es wohl auch weniger. Wichtiger ist (oder sollte sein) dass die Parameter, die dort unter "Texture Parameters" aufgelistet sind, auch alle angegeben werden. Danach sollte es eigentlich ein texture.bind() tun (obwohl ich die API von Slick da nicht genau genug kenne)
 

darman96

Aktives Mitglied
öhhm ich bin zwar noch neu in java und erst recht openGL aber könnte es sein das das daran liegt das du oben bevor du die texture einbindest, die Farbe Weiß einbindest ??
hier:
Java:
@Override
    public void drawOpenGL()
    {
        Color.white.bind();
        texture.bind();
        glBegin(GL_QUADS);

Gruß darman96
 

tdc

Bekanntes Mitglied
@Marco:
Mist, ich hab doch schon geahnt, dass es an dem Klammern liegt. :D
Danke.

@darman96:
Könnte sein... allerdings glaube ich mich daran erinnern zu können, dass es in einigen Beispielen genau so gemacht wurde. Naja, ich kann es ja mal ausprobieren.

Edit: Nein, an Color.white.bind() liegt es nicht.
 
Zuletzt bearbeitet:

tdc

Bekanntes Mitglied
Bräuchte nochmal Hilfe beim Umstellen des Codes von Slick auf OpenGL. Also der Code sieht jetzt folgendermaßen aus:

Java:
@Override
	public void drawOpenGL()
	{
		//Color.white.bind();
		//texture.bind();
		glBindTexture(GL_TEXTURE_2D, 0);
		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();
	}
	
	// load a 256x256 RGB .RAW file as a texture
	public void LoadTextureRAW(String filename, boolean wrap)
	{
	    BufferedImage img = null;
		try
		{
			img = ImageIO.read(new File(new File("").getAbsolutePath()+"/src/ressources/images/textures/"+filename));
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	    DataBuffer db = img.getRaster().getDataBuffer();
	    byte[] tmp = ((DataBufferByte)(db)).getData();
	    ByteBuffer imagetransport = BufferUtils.createByteBuffer(tmp.length);
	    imagetransport.put(tmp);
	    imagetransport.flip();
	    IntBuffer intbuf = BufferUtils.createIntBuffer(1);
	    
	    // allocate a texture name
	    System.out.println(intbuf);
	    glGenTextures(intbuf);

	    // select our current texture
	    glBindTexture(GL_TEXTURE_2D, intbuf.get(0));
	    
	    glTexImage2D(GL_TEXTURE_2D,
	    				0,
	    				img.getColorModel().hasAlpha() ? GL_RGBA : GL_RGB,
	    				img.getWidth(),
	    				img.getHeight(),
	    				0,
	    				img.getColorModel().hasAlpha() ? GL_RGBA : GL_RGB,GL_UNSIGNED_BYTE,
	    				imagetransport //byte buffer
	    				);
	}

Erstmal ist es so ok? Wenn ja, wie binde ich die Textur an den Würfel? Eigentlich ja mit:
Java:
glBindTexture(GL_TEXTURE_2D, 0);
Aber wie finde ich die Texture ID der geladenen Textur heraus?

Also mit Slick fand ich das viel unkomplizierter...
 

Marco13

Top Contributor
OK.. Was genau war mit Slick einfacher (sorry, ich kenn mich damit nicht aus) - nur das Texturladen? Man könnte sagen: Ja, genau dafür ist Slick ja da! :D

Vielleicht bräuchtest du das gar nicht so kompliziert zu machen, wie jetzt - vor allem weil das mit dem cast auf DataBufferByte, wie gesagt, gefährlich ist.

Aber wie auch immer, für einen Test ob es grundsätzlich geht, und solange du kein Compilierbares Testbesipiel postest: Dort
glBindTexture(GL_TEXTURE_2D, intbuf.get(0));
wird ja schon die Texture-ID verwendet. Es kann ja mehrere geben. Für einen ersten Test könntest du die als privaten 'int' einfach speichern, und dann vor dem Zeichnen setzen
Java:
private int textureID;
...
// Beim Laden:
textureID = intbuf.get(0);
...
// Vor dem  Malen:
glBindTexture(GL_TEXTURE_2D, textureID);
Wenn's nicht hilft wäre ein Beispiel sicher gut zum testen, auch wenn ich z.B. Slick jetzt gerade nicht installiert hab'...
 

tdc

Bekanntes Mitglied
Okay, sobald ich wieder Zeit hab werde ich mal ein Beispiel hochladen... (zurzeit hab ich leider keine Zeit wegen Schule)
 

tdc

Bekanntes Mitglied
Sooo.... ich habe jetzt mal ein (K)SKB zusammengestellt. Um es auszuführen braucht man LWJGL (die Jars "lwjgl" und "lwjgl_util") und Slick.

Beschreibung:
Ich habe jetzt die wichtigsten Klassen herausgesucht: Game, GameObject, Block, TexturedBlock und Start.

Game:
Die Spielklasse in der die Spielschleife und die OpenGL-Initialisierungs- und Zeichenmethode enthalten sind.

GameObject:
Jedes Objekt im Spiel erbt von dieser Klasse, in ihr sind z.B. die Methoden initDraw() und endDraw() enthalten. In der Spielschleife wird, wenn ein Objekt gezeichnet wird, immer erst initDraw(), dann drawOpenGL() (des Objektes) und endDraw() aufgerufen.

Block:
Ein farbiger Block, dessen Kanten hervorgehoben sind.

TexturedBlock:
Hier liegt mein Problem. Eigentlich soll ein Block mit einer Textur erscheinen, stattdessen erscheint ledeglich ein farbiger Block.

Start:
Zum Starten des Programms.

Quellcode:

Game:
Java:
package kskb;

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

import java.util.Vector;

import org.lwjgl.LWJGLException;
import org.lwjgl.Sys;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.util.glu.GLU;

public class Game
{
	long lastFrame;
	int fps;
	long lastFPS;
	
	Vector<GameObject> objects;
	
	public void start()
	{
		try
		{
			Display.setDisplayMode(new DisplayMode(800,600));
			Display.create();
			Display.setLocation(100, 100);
		}
		catch (LWJGLException e)
		{
			e.printStackTrace();
			System.exit(0);
		}
		
		initOpenGL();
		getDelta();
		lastFPS = getTime();
		initGame();

		while (!Display.isCloseRequested())
		{
			GLU.gluLookAt(10, 10, 10, 0, 0, 0, 0, 1, 0);
			int delta = getDelta();
			updateFPS();
			drawOpenGL();
			Display.update();
			Display.sync(200); // cap fps to 60fps
		}
		
		Display.destroy();
	}
	
	public void initGame()
	{
		objects = new Vector<GameObject>();
		
		objects.addElement(new Block(0,0,0,1,1,1,0.8f,0.8f,0.8f));
		objects.addElement(new TexturedBlock(3,0,0,1,1,1,new String[2]));
	}
	
	public int getDelta()
	{
	    long time = getTime();
	    int delta = (int) (time - lastFrame);
	    lastFrame = time;
	 
	    return delta;
	}
	
	public long getTime()
	{
	    return (Sys.getTime() * 1000) / Sys.getTimerResolution();
	}
	
	public void updateFPS()
	{
		if (getTime() - lastFPS > 1000)
		{
			Display.setTitle("FPS: " + fps);
			fps = 0;
			lastFPS += 1000;
		}
		fps++;
	}
	
	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

        // Really Nice Perspective Calculations
        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
	}
	
	public void drawOpenGL()
	{
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);          // Clear The Screen And The Depth Buffer  
		
		//3D
		for(GameObject obj:objects)
        {
        	obj.initDraw();
        	obj.drawOpenGL();
        	obj.endDraw();
        }
        
        glMatrixMode(GL_PROJECTION);
        glPushMatrix();
        glLoadIdentity();
        glOrtho(0,getWidth(),getHeight(),0,-1,1);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();

        //2D
        
        glMatrixMode(GL_PROJECTION);
        glPopMatrix();
        glMatrixMode(GL_MODELVIEW);
	}
	
	public int getWidth()
	{
		return Display.getDisplayMode().getWidth();
	}
	
	public int getHeight()
	{
		return Display.getDisplayMode().getHeight();
	}
}

GameObject:
Java:
package kskb;

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

public abstract class GameObject
{
	float x, y, z;
	float width, height, deep;
	float r, g, b;
	float alpha = 1.0f;
	
	float rotX, rotY;
	
	public abstract void drawOpenGL();
	
	public GameObject(float x, float y, float z, float width, float height, float deep, float r, float g, float b)
	{
		this.x = x;
		this.y = y;
		this.z = z;
		this.width = width;
		this.height = height;
		this.deep = deep;
		this.r = r;
		this.g = g;
		this.b = b;
		
		rotX = 0;
		rotY = 0;
	}
	
	public void initDraw()
	{
		glPushMatrix();
		//glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
		glColor4f(r,g,b,alpha);
        glTranslatef(x,y,z);
        glTranslatef(width/2,height/2,deep/2);
        glRotatef(rotY, 0.0f, 1.0f, 0.0f);
        glRotatef(rotX, 1.0f, 0.0f, 0.0f);
        glTranslatef(-width/2,-height/2,-deep/2);
	}
	
	public void endDraw()
	{
		glPopMatrix();
	}
	
	public void setX(float x)
	{
		this.x = x;
	}
	
	public void setY(float y)
	{
		this.y = y;
	}
	
	public void setZ(float z)
	{
		this.z = z;
	}
	
	public void setAlpha(float a)
	{
		alpha = a;
	}
	
	public float getX()
	{
		return x;
	}
	
	public float getY()
	{
		return y;
	}
	
	public float getZ()
	{
		return z;
	}
	
	public float getWidth()
	{
		return width;
	}
	
	public float getHeight()
	{
		return height;
	}
	
	public float getDeep()
	{
		return deep;
	}
	
	public void drawCube()
	{
		glBegin(GL_QUADS);                        // Draw A Quad
			// Front Face
    		glVertex3f(0, 0, deep); // Bottom Left Of The Texture and Quad
    		glVertex3f(width, 0, deep); // Bottom Right Of The Texture and Quad
    		glVertex3f(width, height, deep); // Top Right Of The Texture and Quad
    		glVertex3f(0, height, deep); // Top Left Of The Texture and Quad
    		// Back Face
    		glVertex3f(0, 0, 0); // Bottom Right Of The Texture and Quad
    		glVertex3f(0, height, 0); // Top Right Of The Texture and Quad
    		glVertex3f(width, height, 0); // Top Left Of The Texture and Quad
    		glVertex3f(width, 0, 0); // Bottom Left Of The Texture and Quad
    		// Top Face
    		glVertex3f(0, height, 0); // Top Left Of The Texture and Quad
    		glVertex3f(0, height, deep); // Bottom Left Of The Texture and Quad
    		glVertex3f(width, height, deep); // Bottom Right Of The Texture and Quad
    		glVertex3f(width, height, 0); // Top Right Of The Texture and Quad
    		// Bottom Face
    		glVertex3f(0, 0, 0); // Top Right Of The Texture and Quad
    		glVertex3f(width, 0, 0); // Top Left Of The Texture and Quad
    		glVertex3f(width, 0, deep); // Bottom Left Of The Texture and Quad
    		glVertex3f(0, 0, deep); // Bottom Right Of The Texture and Quad
    		// Right face
    		glVertex3f(width, 0, 0); // Bottom Right Of The Texture and Quad
    		glVertex3f(width, height, 0); // Top Right Of The Texture and Quad
    		glVertex3f(width, height, deep); // Top Left Of The Texture and Quad
    		glVertex3f(width, 0, deep); // Bottom Left Of The Texture and Quad
    		// Left Face
    		glVertex3f(0, 0, 0); // Bottom Left Of The Texture and Quad
    		glVertex3f(0, 0, deep); // Bottom Right Of The Texture and Quad
    		glVertex3f(0, height, deep); // Top Right Of The Texture and Quad
    		glVertex3f(0, height, 0); // Top Left Of The Texture and Quad
        glEnd();                                       // Done Drawing The Quad
        
        //***LINES AT EDGES***
        glColor3f(0,0,0);
        //Bottom
		glBegin(GL_LINES);
			glVertex3f(0, 0, 0);
			glVertex3f(width, 0, 0);
		glEnd( );
		glBegin(GL_LINES);
			glVertex3f(width, 0, 0);
			glVertex3f(width, 0, deep);
		glEnd( );
		glBegin(GL_LINES);
			glVertex3f(width, 0, deep);
			glVertex3f(0, 0, deep);
		glEnd( );
		glBegin(GL_LINES);
			glVertex3f(0, 0, deep);
			glVertex3f(0, 0, 0);
		glEnd( );
		
		//Sides
		glBegin(GL_LINES);
			glVertex3f(0, 0, 0);
			glVertex3f(0, height, 0);
		glEnd( );
		glBegin(GL_LINES);
			glVertex3f(width, 0, 0);
			glVertex3f(width, height, 0);
		glEnd( );
		glBegin(GL_LINES);
			glVertex3f(width, 0, deep);
			glVertex3f(width, height, deep);
		glEnd( );
		glBegin(GL_LINES);
			glVertex3f(0, 0, deep);
			glVertex3f(0, height, deep);
		glEnd( );
		
		//Top
		glBegin(GL_LINES);
			glVertex3f(0, height, 0);
			glVertex3f(width, height, 0);
		glEnd( );
		glBegin(GL_LINES);
			glVertex3f(width, height, 0);
			glVertex3f(width, height, deep);
		glEnd( );
		glBegin(GL_LINES);
			glVertex3f(width, height, deep);
			glVertex3f(0, height, deep);
		glEnd( );
		glBegin(GL_LINES);
			glVertex3f(0, height, deep);
			glVertex3f(0, height, 0);
		glEnd( );
	}
}

Block:
Java:
package kskb;

public class Block
	extends GameObject
{
	public Block(float x, float y, float z, float width, float height, float deep, float r, float g, float b)
	{
		super(x, y, z, width, height, deep, r, g, b);
	}
	
	public void drawOpenGL()
	{
		drawCube();
	}
}v

TexturedBlock:
Java:
package kskb;

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

import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;

import javax.imageio.ImageIO;

import org.lwjgl.BufferUtils;
import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureLoader;

public class TexturedBlock
	extends GameObject
{
	Texture[] textures = new Texture[6];
	Texture texture;
	
	public TexturedBlock(float x, float y, float z, float width, float height, float deep, String[] texturenames)
	{
		super(x, y, z, width, height, deep, 0.8f, 0.8f, 0.8f);
		
		// *** VERSCHIEDENE METHODEN ZUM LADEN DER TEXTUR ***
		//TextureLibrary texturelibrary = new TextureLibrary();
		//LoadTextureRAW("texture.jpg", false);
		loadTexture("texture.png", "PNG");
		for(int t = 0; t < texturenames.length; t++)
		{
			//textures[t] = texturelibrary.getTexture(texturenames[t]);
		}
		//loadTexture("texture.jpg", "JPG");
	}
	
	@Override
	public void drawOpenGL()
	{
		//Color.white.bind();
		//texture.bind();
		glBindTexture(GL_TEXTURE_2D, 10);
		//System.out.println(GL_TEXTURE_HEIGHT);
		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();
	}
	
	private void loadTexture(String name, String datatype)
	{
		try
		{
			texture = TextureLoader.getTexture(datatype, new FileInputStream(new File("").getAbsolutePath()+"/src/kskb/"+name), GL_LINEAR_MIPMAP_NEAREST);
		}
		catch (FileNotFoundException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
    }
	
	
	// Falls Slick nicht geht: OpenGL zum Laden der Texturen
	public void LoadTextureRAW(String filename, boolean wrap)
	{
	    BufferedImage img = null;
		try
		{
			img = ImageIO.read(new File(new File("").getAbsolutePath()+"/src/ressources/images/textures/"+filename));
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	    DataBuffer db = img.getRaster().getDataBuffer();
	    byte[] tmp = ((DataBufferByte)(db)).getData();
	    ByteBuffer imagetransport = BufferUtils.createByteBuffer(tmp.length);
	    imagetransport.put(tmp);
	    imagetransport.flip();
	    IntBuffer intbuf = BufferUtils.createIntBuffer(1);
	    
	    // allocate a texture name
	    System.out.println(intbuf);
	    glGenTextures(intbuf);

	    // select our current texture
	    glBindTexture(GL_TEXTURE_2D, intbuf.get(0));
	    
	    glTexImage2D(GL_TEXTURE_2D,
	    				0,
	    				img.getColorModel().hasAlpha() ? GL_RGBA : GL_RGB,
	    				img.getWidth(),
	    				img.getHeight(),
	    				0,
	    				img.getColorModel().hasAlpha() ? GL_RGBA : GL_RGB,GL_UNSIGNED_BYTE,
	    				imagetransport //byte buffer
	    				);
	}
}

Start:
Java:
package kskb;

public class Start
{
	public static void main(String[] args)
	{
		Game game = new Game();
		game.start();
	}
}


Wenn man es ausführt sieht man links oben einen "Block" und rechts unten einen "TexturedBlock".
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ohne das ", GL_LINEAR_MIPMAP_NEAREST" scheint's erstmal zu gehen. Dann noch im TexturedBlock am Anfang vom Rendern glEnable(GL_TEXTURE_2D), und am Anfang vom Rendern in GameObject glDisable(GL_TEXTURE_2D), dann sollte es schon einigermaßen passen. Was er jetzt gegen die Mipmap-Konstante hat, weiß ich spontan auch nicht...
 

Kr0e

Gesperrter Benutzer
Ich habe noch nie mit Mipmaps gearbeitet, aber mir dümpelt da im GEdächtnis was rum, dass man MipMaps doch iwie ncoh speziell erstellen muss, oder ?
 

Kr0e

Gesperrter Benutzer
hmmm, ich glaube sogar, dass es das tut. Aber der TO arbeitet nicht komplett mit Slick sondern nutzt nur Teilsegmente, was ich persönlich sowieso für fragwürdig halte. Slick hat teilweise "versteckte" Magie, gerade im Bezug auf Texturen, die ohne das Slicksystem ggf. stören (oder sogar keinen Sinn machen).
 

tdc

Bekanntes Mitglied
Danke, im KSKB gehts jetzt.

Jetzt habe ich versucht, es auf mein komplettes Programm zu übertragen und es funktioniert natürlich nicht... :shock:
Naja, jetzt werde ich erstmal mein komplettes Programm durchsuchen und schauen woran es liegen könnte.
 

tdc

Bekanntes Mitglied
Also das Problem besteht immer noch und ich finde es jetzt etwas merkwürdig.

Ich habe jetzt versucht an zwei Stellen im Code versucht, einen Würfel mit Textur zu erstellen. Einmal in meiner Hauptklasse "Game", wo es funktioniert, ich es aber nicht haben will und einmal in meiner Klasse "TexturedBlock" wo es hin soll, dort funktioniert es aber nicht.
Am Laden der Textur sollte es nicht liegen, da es aus einer Klasse "TextureLibrary" geladen wird - der Ablauf ist also immer der gleiche.

Hier der aktuelle Code:

Klasse Game:
Zeichenmethode in Spielschleife:
Java:
...
//3D
        if(objects != null)
        {
        	for(GameObject obj:objects)
        	{
        		obj.initDraw();
        		obj.drawOpenGL();
        		obj.endDraw();
        	}
        }
        //nur zum testen
        drawTestTexture();
...
Laden der Textur:
Java:
private void loadTestTexture()
	{
		TextureLibrary texturelibrary = new TextureLibrary();
		testtexture = texturelibrary.getTexture("");
    }
Zeichenmethode für Würfel: (funktioniert)
Java:
public void drawTestTexture()
	{
		glEnable(GL_TEXTURE_2D);
		glColor3f(1f,1f,1f);
		Color.white.bind();
		testtexture.bind();
		glBegin(GL_QUADS);
			// Front Face
			glTexCoord2f(0.0f, 0.0f);
			glVertex3f(0, 0, 1);
			glTexCoord2f(1.0f, 0.0f);
			glVertex3f(1, 0, 1);
			glTexCoord2f(1.0f, 1.0f);
			glVertex3f(1, 1, 1);
			glTexCoord2f(0.0f, 1.0f);
			glVertex3f(0, 1, 1);
			// Back Face
			glTexCoord2f(1.0f, 0.0f);
			glVertex3f(0, 0, 0);
			glTexCoord2f(1.0f, 1.0f);
			glVertex3f(0, 1, 0);
			glTexCoord2f(0.0f, 1.0f);
			glVertex3f(1, 1, 0);
			glTexCoord2f(0.0f, 0.0f);
			glVertex3f(1, 0, 0);
			// Top Face
			glTexCoord2f(0.0f, 1.0f);
			glVertex3f(0, 1, 0);
			glTexCoord2f(0.0f, 0.0f);
			glVertex3f(0, 1, 1);
			glTexCoord2f(1.0f, 0.0f);
			glVertex3f(1, 1, 1);
			glTexCoord2f(1.0f, 1.0f);
			glVertex3f(1, 1, 0);
			// Bottom Face
			glTexCoord2f(1.0f, 1.0f);
			glVertex3f(0, 0, 0);
			glTexCoord2f(0.0f, 1.0f);
			glVertex3f(1, 0, 0);
			glTexCoord2f(0.0f, 0.0f);
			glVertex3f(1, 0, 1);
			glTexCoord2f(1.0f, 0.0f);
			glVertex3f(0, 0, 1);
			// Right face
			glTexCoord2f(1.0f, 0.0f);
			glVertex3f(1, 0, 0);
			glTexCoord2f(1.0f, 1.0f);
			glVertex3f(1, 1, 0);
			glTexCoord2f(0.0f, 1.0f);
			glVertex3f(1, 1, 1);
			glTexCoord2f(0.0f, 0.0f);
			glVertex3f(1, 0, 1);
			// Left Face
			glTexCoord2f(0.0f, 0.0f);
			glVertex3f(0, 0, 0);
			glTexCoord2f(1.0f, 0.0f);
			glVertex3f(0, 0, 1);
			glTexCoord2f(1.0f, 1.0f);
			glVertex3f(0, 1, 1);
			glTexCoord2f(0.0f, 1.0f);
			glVertex3f(0, 1, 0);
		glEnd();
	}

Klasse TexturedBlock: (unfertig, sollte funktionieren)
Java:
package objects;

import static org.lwjgl.opengl.GL11.GL_QUADS;
import static org.lwjgl.opengl.GL11.glBegin;
import static org.lwjgl.opengl.GL11.glEnd;
import static org.lwjgl.opengl.GL11.glTexCoord2f;
import static org.lwjgl.opengl.GL11.glVertex3f;
import static org.lwjgl.opengl.GL11.glBindTexture;
import static org.lwjgl.opengl.GL11.*;

import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;

import javax.imageio.ImageIO;

import model.TextureLibrary;

import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL11;
import org.newdawn.slick.Color;
import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureImpl;
import org.newdawn.slick.opengl.TextureLoader;

public class TexturedBlock
	extends Block
{
	//Texture[] textures = new Texture[6];
	Texture texture;
	
	public TexturedBlock(float x, float y, float z, float width, float height, float deep, String[] texturenames)
	{
		super(x, y, z, width, height, deep, 0.8f, 0.8f, 0.8f);
		//loadTexture("HighRiseGlass0003_1_S.jpg", "JPG");
		TextureLibrary texturelibrary = new TextureLibrary();
		//for(int t = 0; t < texturenames.length; t++)
		//{
		texture = texturelibrary.getTexture("");
		//}
	}
	
	@Override
	public void drawOpenGL()
	{
		glEnable(GL_TEXTURE_2D);
		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();
	}
	
        //nicht benutzt
	private void loadTexture(String name, String datatype)
	{
		try
		{
			texture = TextureLoader.getTexture(datatype, new FileInputStream(new File("").getAbsolutePath()+"/src/ressources/images/textures/"+name));
		}
		catch (FileNotFoundException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
    }
}

Klasse TextureLibrary:
Java:
package model;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureLoader;
import org.newdawn.slick.util.ResourceLoader;

public class TextureLibrary
{
	public Texture getTexture(String name)
	{
		Texture texture = null;
		try
		{
			texture = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream("ressources/images/textures/glass1p3.png"));
			
			System.out.println("Texture loaded: "+texture);
			System.out.println(">> Image width: "+texture.getImageWidth());
			System.out.println(">> Image height: "+texture.getImageHeight());
			System.out.println(">> Texture width: "+texture.getTextureWidth());
			System.out.println(">> Texture height: "+texture.getTextureHeight());
			System.out.println(">> Texture ID: "+texture.getTextureID());
		}
		catch (FileNotFoundException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		return texture;
	}
}

Letztendlich wird der Würfel doch beide male auf die gleiche Weise gezeichnet. Warum geht es dann einmal nicht?
 

Marco13

Top Contributor
Das ist fast nicht nachzuvollziehen. Wenn man mal spekulativ-unfundiert annimmt, dass z.B. "Block" von "GameObject" erbt, stehen da immernoch so Zeilen wie
texture = texturelibrary.getTexture("");
wo man sich fragt, was genau dort passieren soll...
Vielleicht KÖNNTE man genauer schauen, wenn du das ganze Compilier- und Startbar als ZIP hochlädst, aber ... da muss sich auch jemand finden, der sich die Zeit für's remote-debugging nehmen will...
 

tdc

Bekanntes Mitglied
Ich glaube es KÖNNTE sein, dass das gleich nicht mehr notwendig ist. Ich habe gerade mal versucht auf jeden Block eine Textur zu zeichnen und dabei ist mir aufgefallen, dass nur der erste Block im Vector objects eine Textur bekommen hat. Das erinnert mich stark an ein älteres Problem mit Fonts in Slick, bei dem auch immer nur der erste Schriftzug gezeichnet wurde. Das wurde dann durch ein "TextureImpl.bindNone()" behoben. Hier hilft es mir bisher noch nicht...
Scheint jedenfalls doch wieder an Slick zu liegen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D LWJGL - 2D Texturen werden nicht dargestellt Spiele- und Multimedia-Programmierung 12
T LWJGL: Terrain-Texturen / 2D-Array in Shader? Spiele- und Multimedia-Programmierung 2
Seikuassi LWJGL - Texturen flackern Spiele- und Multimedia-Programmierung 2
X [LWJGL] Binden von Texturen per PNG File und Texture Sheet Spiele- und Multimedia-Programmierung 1
Luk10 (LWJGL) Aufwendiges Animieren von Texturen Spiele- und Multimedia-Programmierung 16
S LWJGL Texturen Spiele- und Multimedia-Programmierung 14
P LWJGL Texturen Spiele- und Multimedia-Programmierung 6
Ivan Dolvich [LWJGL] Texturen überlagern sich Spiele- und Multimedia-Programmierung 2
coolian lwjgl glfw window zeigt nur grau an Spiele- und Multimedia-Programmierung 0
coolian slick lwjgl text darstellen mit UnicodeFont funktoniert nicht? Spiele- und Multimedia-Programmierung 11
F OpenGL (LWJGL) Shader Programmierung GLSL Spiele- und Multimedia-Programmierung 2
Meeresgott LWJGL 3 Problem mit einer Texture Spiele- und Multimedia-Programmierung 4
V LWJGL GUI Spiele- und Multimedia-Programmierung 1
V GUI in LWJGL 2 erstellen Spiele- und Multimedia-Programmierung 6
C GLSL Shaderprogrammierung in LWJGL 3 Spiele- und Multimedia-Programmierung 12
G Low Poly 3D LWJGL Shader Problem Spiele- und Multimedia-Programmierung 4
B LWJGL OpenGL SIGSEGV auf Linux (Verzweiflung :/) Spiele- und Multimedia-Programmierung 8
G LWJGL .obj .mtl loader Spiele- und Multimedia-Programmierung 3
G 2D animationen LWJGL Spiele- und Multimedia-Programmierung 0
pcfreak9000 "Allgemeine" Performance verbessern (LWJGL 2) Spiele- und Multimedia-Programmierung 2
G LWJGL Rendert nicht Spiele- und Multimedia-Programmierung 3
G lwjgl verwendung Spiele- und Multimedia-Programmierung 6
R [LWJGL] Skeletal Animation Spiele- und Multimedia-Programmierung 5
E LWJGL glGenVertexArrays() erzeugt doppelte IDs Spiele- und Multimedia-Programmierung 3
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
K No Lwjgl Spiele- und Multimedia-Programmierung 2
T LWJGL 2.9.2: Seltsamer Effekt beim Rendern (VertexShader Problem?) Spiele- und Multimedia-Programmierung 3
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
P java lwjgl Game Spiele- und Multimedia-Programmierung 0
T [LWJGL] Textur / File wieder freigeben Spiele- und Multimedia-Programmierung 4
F [LWJGL] Skeletal Animation 3D Spiele- und Multimedia-Programmierung 1
C Generelle Hilfe zur lwjgl Spiele- und Multimedia-Programmierung 0
D LWJGL gluLookAt "Umschauen" Problem Spiele- und Multimedia-Programmierung 0
D Problem mit Würfelanimierung in LWJGL Spiele- und Multimedia-Programmierung 7
RalleYTN LWJGL Vignette Spiele- und Multimedia-Programmierung 2
E LWJGL Switchen zwischen gluOrtho und gluPerspective Spiele- und Multimedia-Programmierung 0
RalleYTN LWJGL Rotation Spiele- und Multimedia-Programmierung 1
C LWJGL Color Picking Textures deaktivieren Spiele- und Multimedia-Programmierung 0
K FBO Framebuffer object [LWJGL] 2D tutorial gesucht Spiele- und Multimedia-Programmierung 2
K [LWJGL] 2D Tunneler Hintergrund Spiele- und Multimedia-Programmierung 7
S LWJGL 3d-spieleentwicklung Spiele- und Multimedia-Programmierung 3
H LWJGL-Renderfail Spiele- und Multimedia-Programmierung 1
Androbin LWJGL - Kollisions-Bug (Fallen) Spiele- und Multimedia-Programmierung 14
K Schiessen in 2D (LWJGL) Spiele- und Multimedia-Programmierung 2
S LWJGL Kamera Problem - Alles verzerrt Spiele- und Multimedia-Programmierung 4
U Kann nur ein Objekt mit LWJGL rendern Spiele- und Multimedia-Programmierung 2
X LWJGL | Parent.isDisplayable() must be true | wie kann man das zu true machen? Spiele- und Multimedia-Programmierung 0
X LWJGL - Anklick baren Button erstellen aber wie? Spiele- und Multimedia-Programmierung 6
U Quadrate anklicken LWJGL Spiele- und Multimedia-Programmierung 3
B LWJGL / OPENGL Kriege Depth-Test nicht hin :( Spiele- und Multimedia-Programmierung 0
B LWJGL Manche Seiten werden transparent angezeigt Spiele- und Multimedia-Programmierung 2
T LWJGL VBO's funktionieren nicht, geben aber auch keinen Fehler Spiele- und Multimedia-Programmierung 0
U Komische fragmente bei LWJGL Spiele- und Multimedia-Programmierung 6
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
Q LWJGL - Alpha-Probleme Spiele- und Multimedia-Programmierung 2
S [LWJGL] Zweimal selbe Textur trotz unterschiedlicher IDs Spiele- und Multimedia-Programmierung 3
O LWJGL AWTGLCanvas Tiefe auf 1 beschränkt Spiele- und Multimedia-Programmierung 5
Seikuassi LWJGL-Problem Spiele- und Multimedia-Programmierung 2
S [LWJGL] schwarzer Bildschrim beim rendern von .obj Model Spiele- und Multimedia-Programmierung 2
S [lwjgl] Renderbug bei mehreren Objekten Spiele- und Multimedia-Programmierung 2
R LWJGL: OpenGL Fehler - weitere Informationen auslesen möglich? Spiele- und Multimedia-Programmierung 2
S LWJGL Kamera Koordinaten invertiert. Spiele- und Multimedia-Programmierung 2
M LWJGL Text rendern Spiele- und Multimedia-Programmierung 3
B LWJGL Mauskoordinaten Spiele- und Multimedia-Programmierung 1
J LWJGL Update Schleife (Snake) Spiele- und Multimedia-Programmierung 6
B LWJGL Display.update() ist langsam Spiele- und Multimedia-Programmierung 5
R LWJGL: Performance glBegin, drawList, ... Spiele- und Multimedia-Programmierung 16
R LWJGL: Object Loader -> .obj, .c4d, ... laden Spiele- und Multimedia-Programmierung 3
R LWJGL: Textur -> unsichtbare Stellen, wie erzeugen? Spiele- und Multimedia-Programmierung 4
A LwJGL - Animation Stockt Spiele- und Multimedia-Programmierung 5
R [lwjgl] Cursor -> versetzt Zeichnen / Bild ist umgedreht Spiele- und Multimedia-Programmierung 2
R LWJGL: 3D Picking Spiele- und Multimedia-Programmierung 4
F LWJGL: Textur ändern mit GL11.readPixels Spiele- und Multimedia-Programmierung 5
F LWJGL: Licht und GL_LINES funktioniert nicht Spiele- und Multimedia-Programmierung 6
A [LWJGL] BMP Textur wird nicht richtig dargestellt Spiele- und Multimedia-Programmierung 8
S LWJGL Rechteck wird nicht gezeichnet Spiele- und Multimedia-Programmierung 6
F LWJGL: Is undefined? Spiele- und Multimedia-Programmierung 7
F LWJGL Kamerabug Spiele- und Multimedia-Programmierung 2
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
F LWJGL Dreidimensionaler Würfel Spiele- und Multimedia-Programmierung 15
P LWJGL oder OpenGL (C++) Spiele- und Multimedia-Programmierung 7
P "Tiefe" in Objekten - LWJGL Spiele- und Multimedia-Programmierung 12
T LWJGL 3D Objekt Collision: Wie? Spiele- und Multimedia-Programmierung 11
S LWJGL Kamera Frage Spiele- und Multimedia-Programmierung 2
V Komischer Fehler in LWJGL Spiele- und Multimedia-Programmierung 18
Z lwjgl oder jogl nutzen Spiele- und Multimedia-Programmierung 9
Y LWJGL Hintergrund Spiele- und Multimedia-Programmierung 7
Creylon [LWJGL] Textur wird falsch angezeigt Spiele- und Multimedia-Programmierung 12
Creylon [LWJGL] Spiel Exportieren Spiele- und Multimedia-Programmierung 2
Creylon [LWJGL] 2D Sprite Rotieren/Drehen Spiele- und Multimedia-Programmierung 6
CookieSoft LWJGL Ubuntu 12.04 Fehler Spiele- und Multimedia-Programmierung 7
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
F lwjgl - Skysphere Spiele- und Multimedia-Programmierung 3
CookieSoft Slick und LWJGL Texture lag Spiele- und Multimedia-Programmierung 13
U OpenGl 1.1 (LWJGL GL11.*) und weiter? Spiele- und Multimedia-Programmierung 7
0 Grafikfehler LWJGL Spiele- und Multimedia-Programmierung 2
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
S (LWJGL) VertexBufferObjects Spiele- und Multimedia-Programmierung 20
T LWJGL Grafik meines Projektes läuft nicht korrekt auf meinem iMac Spiele- und Multimedia-Programmierung 19

Ähnliche Java Themen

Neue Themen


Oben