2012-04-04 7 views
2

Ich versuche, Texturen in meine Java OpenGL-Szene zu bringen, aber wenn ich das tue, werden die Farben anderer Dinge verzerrt, als würde es die Farben falsch mischen. Ich verwende LWJGL für OpenGL und Slick zum Laden der Texturen. Wenn ich den GL11.glEnable(GL11.GL_TEXTURE_2D); Aufruf unkommentiert lasse, werden die Farben abgedunkelt, aber wenn ich diese eine Zeile kommentiere, sind die Farben korrekt, aber ich habe offensichtlich keine Texturen.Java OpenGL GL_TEXTURE_2D verdunkelt andere Farben

Ich habe meinen Code hier setzen http://codepaste.net/26bguu

die fragliche Zeile ist Zeile 63

Eine Arbeit um die ich gefunden habe ist Texturen ermöglicht, kurz bevor ich die Texturen zeichnen, dann sofort wieder nach dem Deaktivieren. Ich denke jedoch, dass dies unnötig sein sollte. Unten sind einige Screenshots, die zeigen, was ich meine. Der einzige Unterschied ist, dass eine Zeile kommentiert und nicht kommentiert wurde.

Without textures enabled. All colours are bright.

With textures enabled. All colours are darker.

Antwort

3

Sie tun müssen, tatsächlich aktivieren und deaktivieren GL_TEXTURE_2D nach Bedarf.

Wenn GL_TEXTURE_2D aktiviert ist, wird der GL (normalerweise) ignorieren die Vertex-Farben, die Sie liefern, und Karte statt der angegebenen Textur auf die gegebenen Texturkoordinaten die Farbe für jedes Fragment/Pixel zu erhalten. Wenn Sie die Texturkoordinaten nicht übergeben, kann alles passieren - wie zum Beispiel der zweite Screenshot, den Sie gepostet haben.

Es ist nicht ungewöhnlich, dass Sie 20+ Opengl-Aufrufe machen müssen, um sich auf das Zeichnen jedes "Objekts" vorzubereiten. Das ist der Grund, warum OpenGL-Programmierer viel Zeit damit verbringen, eine große Anzahl von Dreiecken in einzelne Puffer zu packen, um sie gleichzeitig mit einem einzigen Zeichenaufruf zu zeichnen - das verbessert die Performance erheblich.

+0

Ok, ich werde die Lösung verwenden, die ich dachte, war eine ziemlich hacky Work-Around: P Nun, ich muss noch die Details von OpenGL lernen. Danke für die Hilfe. – null0pointer