OpenGL - Texture falsch herum

O

Oneric

Gast
Hi

ich bin gerade dabei ein Grundgerüst für ein Projekt mit OpenGL aufzubauen.
Da ich mich aber schon länger nicht mehr mit OpenGL beschäftigt habe gibts erwartungsgemäß ein paar Probleme.
Ich habe eine Methode zum Laden von Texturen (auch nicht-"power of two") erstellt und zum testen eine Texture auf ein Quadrat gemappt.
Seltsamerweise ist die Texture jetzt aber falsch herum.

Hier ist das Ergebnis:
jhzml19q4s.png


Hier das eigentliche Bild:
xglbs9b3wi6c.png


Und hier mein Code:

Hauptklasse:
Java:
package oneric.level.main;

import java.io.File;
import java.io.IOException;

import oneric.importer.obj.Model;
import oneric.importer.obj.OBJLoader;
import oneric.util.GLHelper;


//import org.lwjgl.opengl.GL11;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL15;

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

public class Main {

	private static Level level;
	
	static int[] ids;
	static int length;
	static int textureID;
	
	public static void main(String[] args) {
		
		setUpDisplay();
		setUpOpenGL();
		
		level = loadLevel("res/Level.lev"); //NIcht wichtig, ist noch nicht gecoded
		
		
		try {
			Model mod = OBJLoader.loadModel(new File("res/Landscape.obj")); // Wird auch noch nicht verwendet
			ids = OBJLoader.createVBO(mod);
			length = mod.faces.size() * 3;

			textureID = GLHelper.loadImage("res/16.png");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		
		while(!Display.isCloseRequested())
		{
			render();
			
			Display.update();
			Display.sync(120);
		}

	}
	
	
	public static Level loadLevel(String location)
	{
		return null;
	}
	
	
	/**
	 * Sets up the Display
	 * */
	private static void setUpDisplay() {
		
        try {
        	
            Display.setDisplayMode(/*Display.getDesktopDisplayMode()*/new DisplayMode(640, 360));
            Display.setVSyncEnabled(true);
            Display.setTitle("Level: ");
            //Display.setFullscreen(true);
            Display.create();
        } catch (LWJGLException e) {
            System.err.println("The display wasn't initialized correctly. :(");
            Display.destroy();
            System.exit(1);
        }
    }
	
	/**
	 * Sets up OpenGl so it's ready to use
	 * */
	private static void setUpOpenGL()
    {
    	
    	GL11.glShadeModel(GL11.GL_SMOOTH);
    	GL11.glEnable(GL11.GL_DEPTH_TEST);
    	GL11.glEnable(GL11.GL_LIGHTING);
    	GL11.glEnable(GL11.GL_LIGHT0);
    	
    	//GL11.glLightModel(GL11.GL_LIGHT_MODEL_AMBIENT, asFlippedFloatBuffer(new float[]{0.05f, 0.05f, 0.05f, 1f}));
    	//GL11.glLight(GL11.GL_LIGHT0, GL11.GL_DIFFUSE, asFlippedFloatBuffer(new float[]{1.0F, 1.0F, 1.0F,1F}));
    	GL11.glEnable(GL11.GL_CULL_FACE);
    	GL11.glCullFace(GL11.GL_BACK);
    	GL11.glEnable(GL11.GL_COLOR_MATERIAL);
    	GL11.glColorMaterial(GL11.GL_FRONT, GL11.GL_DIFFUSE);
    	
    	glEnable(GL_TEXTURE_2D);
    	
    }
	
	
	private static void render()
	{
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();
        
        glEnable(GL_TEXTURE_2D);
        
        
        glBindTexture(GL_TEXTURE_2D, textureID);
		GL11.glBegin(GL11.GL_QUADS);
		//glColor3f(1F, 0, 0);
		glTexCoord2f(0, 0);
		glVertex2f(-1F, -1F);
		
		//glColor3f(0, 1F, 0);
		glTexCoord2f(1, 0);
		glVertex2f(1F, -1F);
		
		//glColor3f(0, 0, 1F);
		glTexCoord2f(1, 1);
		glVertex2f(1F, 1F);
		
		//glColor3f(0, 1, 1F);
		glTexCoord2f(0, 1);
		glVertex2f(-1, 1);
		
		GL11.glEnd();
        
        
	}
	
	
	
	

}

Und hier die "GLHelper" Klasse:
Java:
package oneric.util;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;



import java.nio.ByteBuffer;
import javax.imageio.ImageIO;

import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL12;

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

public class GLHelper {
	
	public static int loadImage(BufferedImage img)
	{
		long l;
		System.out.println((l = System.currentTimeMillis()));
		/**byte[] imgData = ((DataBufferByte)img.getRaster().getDataBuffer()).getData();
		byte[] buffer =  new byte[(img.getWidth() * img.getHeight() * 4) + 1];
		System.out.println("Width: "+ img.getWidth() + " --- Height:  " + img.getHeight());		
		for(int i = 0; i < imgData.length; i+=4)
		{
			buffer[i] = imgData[i+2];   // Rot
			buffer[i+1] = imgData[i+1]; // Gruen
			buffer[i+2] = imgData[i];   // Blau
			buffer[i+3] = (byte) 255;    // Alpha
		}
		
		ByteBuffer textureData = ByteBuffer.allocateDirect(buffer.length); 
        textureData.order(ByteOrder.nativeOrder()); 
        textureData.put(buffer, 0, buffer.length); 
        textureData.flip();*/

		 
		int[] pixels = new int[img.getWidth() * img.getHeight()];
		    img.getRGB(0, 0, img.getWidth(), img.getHeight(), pixels, 0, img.getWidth());

		    ByteBuffer buffer = BufferUtils.createByteBuffer(img.getWidth() * img.getHeight() * 4);
		    Color c;

		    for (int y = 0; y < img.getHeight(); y++) {
		        for (int x = 0; x < img.getWidth(); x++) {
		            c = new Color(img.getRGB(x, y));
		            buffer.put((byte) c.getRed());     // Red component
		            buffer.put((byte) c.getGreen());      // Green component
		            buffer.put((byte) c.getBlue());               // Blue component
		            buffer.put((byte) c.getAlpha());    // Alpha component. Only for RGBA
		        }
		    }

        buffer.flip();
        
        
        int id = glGenTextures(); //Generate texture ID
        glBindTexture(GL_TEXTURE_2D, id); //Bind texture ID

        //Setup wrap mode
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE);

        //Setup texture scaling filtering
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

        //Send texel data to OpenGL
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, img.getWidth(), img.getHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

        
        long l2;
        System.out.println((l2 = System.currentTimeMillis()) + "  diference = " + (l2 - l));
        
        return id;
		
	}
	
	public static int loadImage(File f) throws IOException
	{
		return loadImage(ImageIO.read(f));
	}
	
	public static int loadImage(String path) throws IOException
	{
		return loadImage(new File(path));
	}

}

AUßerdem habe ich in Erinnerung das im moderenen OpenGL eigentlich keine Wrap-Modes und Scaling Modes mehr einzeln für jedes Bild festgelegt werden. Also das der "//Setup wrap mode" und der "//Setup texture scaling filtering" eigentlich weg könnte. wenn ich diese aber weglasse funktioniert nichts.
Täusche ich mich da ?

Mfg,

Oneric
 
Zuletzt bearbeitet von einem Moderator:

Hestalon

Mitglied
Wird denke daran liegen, dass Texturen immer mit der linken oberen Ecke (0,0) und rechte untere Ecke (1,1) angegeben werden.
Im Gegensatz dazu dein Quadrat so wies aussieht mit der linken unteren Ecke (-1,-1) und rechts oben (1,1), wie man es aus einem normalen KO-System kennt.

Gruß
 
O

Oneric

Gast
Wird denke daran liegen, dass Texturen immer mit der linken oberen Ecke (0,0) und rechte untere Ecke (1,1) angegeben werden.
Im Gegensatz dazu dein Quadrat so wies aussieht mit der linken unteren Ecke (-1,-1) und rechts oben (1,1), wie man es aus einem normalen KO-System kennt.

Gruß

Laut den Tuts und Bildern, die ich bei Google gefunden habe ist (0|0) die Untere linke Ecke der Textur.
Aber bei Direct X ist es glaube ich die linke obere Ecke.

20100531_DX_OpenGL.png


ccs-8549-0-98845200-1307472511.jpg
 
O

Oneric

Gast
Also ich habe mir das jetzt mal auf der Website von LWJGL angeschaut und dort ist tatsächlich (0|0) oben links. :O
Weshalb es anscheinend bei manchen anderen OpenGL Libarys anders ist, ist mir schleierhaft.

Egal, ich würde sagen das Thema ist erledigt :D

MfG,

~Oneric
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Opengl Texture laden Null Pointer Exception Spiele- und Multimedia-Programmierung 6
temi OpenGL: Eine Kugel Spiele- und Multimedia-Programmierung 7
P Audio Visualizer mit OpenGL in Java? Spiele- und Multimedia-Programmierung 4
Z Vlcj in OpenGL Spiele- und Multimedia-Programmierung 4
coolian opengl von scale in breite und höhe konvertieren Spiele- und Multimedia-Programmierung 23
F OpenGL (LWJGL) Shader Programmierung GLSL Spiele- und Multimedia-Programmierung 2
K Messdaten in Echtzeit darstellen in OpenGL Spiele- und Multimedia-Programmierung 4
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
B LWJGL OpenGL SIGSEGV auf Linux (Verzweiflung :/) Spiele- und Multimedia-Programmierung 8
KeexZDeveoper Fehler von OpenGL Spiele- und Multimedia-Programmierung 1
Kim_Dotcom libGDX - opengl Fehler Spiele- und Multimedia-Programmierung 5
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
RalleYTN OpenGL Context im JFrame? Spiele- und Multimedia-Programmierung 0
L OpenGL TransformationMatrix eines Flugzeugs Spiele- und Multimedia-Programmierung 2
F OpenGL - Transparenz mit Depth Peeling Spiele- und Multimedia-Programmierung 0
turing OpenGL / Jogle Code Reveiw zur Performance Verbesserung Spiele- und Multimedia-Programmierung 1
K LibGdx, Loadingscreen & Opengl context Spiele- und Multimedia-Programmierung 3
turing OpenGL VBO and Unfiform Handling Spiele- und Multimedia-Programmierung 1
B LWJGL / OPENGL Kriege Depth-Test nicht hin :( Spiele- und Multimedia-Programmierung 0
T opengl und Android.... Spiele- und Multimedia-Programmierung 3
D [OpenGL] Spiel in der Art von Age of Empires Spiele- und Multimedia-Programmierung 4
R LWJGL: OpenGL Fehler - weitere Informationen auslesen möglich? Spiele- und Multimedia-Programmierung 2
T Welche OpenGL-Version soll ich verwenden? Spiele- und Multimedia-Programmierung 2
Gregorrr OpenGL & RCP/SWT Spiele- und Multimedia-Programmierung 3
P LWJGL oder OpenGL (C++) Spiele- und Multimedia-Programmierung 7
K Android: OpenGL render performance Tipps ? Spiele- und Multimedia-Programmierung 4
lumo opengl, sprites/tiles Spiele- und Multimedia-Programmierung 8
M OpenGL: Rectangle dort erstellen wo ich hintippe Spiele- und Multimedia-Programmierung 2
U OpenGl 1.1 (LWJGL GL11.*) und weiter? Spiele- und Multimedia-Programmierung 7
CookieSoft OpenGl Translatef Frage Spiele- und Multimedia-Programmierung 2
V Keine Ahnung von OpenGL! Hilfe wäre lieb! Spiele- und Multimedia-Programmierung 8
T 3D Stadtmodell mit OpenGL Spiele- und Multimedia-Programmierung 5
TheWhiteShadow OpenGL glDrawArrays Bufferfehler Spiele- und Multimedia-Programmierung 10
B LWJGL/OpenGL rendert manche Objekte nicht Spiele- und Multimedia-Programmierung 6
S OpenGL Textur unsauber Spiele- und Multimedia-Programmierung 2
T OpenGL ES verschwindene Vertices Spiele- und Multimedia-Programmierung 2
T Android OpenGL Bewegen Spiele- und Multimedia-Programmierung 5
R OpenGL Textur mit verschiedenen bit depths Spiele- und Multimedia-Programmierung 6
Helgon OpenGL Blend Frage Spiele- und Multimedia-Programmierung 18
A LWJGL/OpenGL und Text Spiele- und Multimedia-Programmierung 8
Helgon OpenGL vernünftige Tutorial? Spiele- und Multimedia-Programmierung 22
A OpenGL Textur und nicht Textur Spiele- und Multimedia-Programmierung 2
T Jmonkey opengl problem Spiele- und Multimedia-Programmierung 13
T Probleme mit Skysphere in Opengl Spiele- und Multimedia-Programmierung 4
M Problem mit Kamera (glMultMatrix (OpenGL/ LWJGL)/ Quaternionen) Spiele- und Multimedia-Programmierung 5
F Suche Tutorial zu "purem" OpenGL mit Java Spiele- und Multimedia-Programmierung 10
Kr0e OpenGL + glSubTexImage2D -> Bufferproblem Spiele- und Multimedia-Programmierung 3
F OpenGL Screenshot in iMove (als Greenscreen) => Farben invertiert? Spiele- und Multimedia-Programmierung 16
I Vergleich von Java3D und OpenGL Spiele- und Multimedia-Programmierung 17
F Mac: OpenGL Desktop-Screen aus Grafikkarte lesen Spiele- und Multimedia-Programmierung 2
F OpenGL 2D MouseClick/MouseMove Listener Spiele- und Multimedia-Programmierung 4
Kr0e Sehr schnelle Texturupdates (OpenGL) Spiele- und Multimedia-Programmierung 3
Kr0e OpenGL beliebige Texturgröße Spiele- und Multimedia-Programmierung 2
BattleMaster246 OpenGL - Transparenz Spiele- und Multimedia-Programmierung 10
Kr0e OpenGL .. Pixel Buffer Objekt oder Frame Buffer Object? Spiele- und Multimedia-Programmierung 2
Y JOGL / OPENGL in Frame Spiele- und Multimedia-Programmierung 11
A Problem openGL-Pipeline mit Win7? Spiele- und Multimedia-Programmierung 6
G OpenGL boolesche operation auf Rechtecke Spiele- und Multimedia-Programmierung 15
A JOGL / OpenGL Spiele- und Multimedia-Programmierung 7
G API für 3d-Programmierung? OpenGL? Spiele- und Multimedia-Programmierung 12
J OpenGL (JOGL) - Radial Blur Effekt (Glow) Spiele- und Multimedia-Programmierung 2
J netbeans opengl keyPressed(KeyEvent evt) benutzen Spiele- und Multimedia-Programmierung 4
J netbeans opengl gluPerspective und gluLookAt Verständnis Spiele- und Multimedia-Programmierung 13
S glTexSubImage2D()-Fragen(Zerstörbares Terrain, OpenGL) Spiele- und Multimedia-Programmierung 3
Z Suche Tutorial zum Einstieg in OpenGl mit Java (JOGL) Spiele- und Multimedia-Programmierung 2
T Overlay in anderer OpenGL Anwendung Spiele- und Multimedia-Programmierung 4
egrath Vista OpenGL Performance Problem? Spiele- und Multimedia-Programmierung 3
Y OpenGL Spiele- und Multimedia-Programmierung 5
J opengl beispiele? Spiele- und Multimedia-Programmierung 10
D Java mit OpenGL - besser LWJGL oder JOGL? Spiele- und Multimedia-Programmierung 6
N OpenGL und DirectX - was genau ist das? Spiele- und Multimedia-Programmierung 5
C OpenGl Support für Applet (sun.java2d.opengl=True) Spiele- und Multimedia-Programmierung 3
B OpenGL oder Direct X Spiele- und Multimedia-Programmierung 9
Meeresgott LWJGL 3 Problem mit einer Texture Spiele- und Multimedia-Programmierung 4
TreCore Render Texture in libGDX Spiele- und Multimedia-Programmierung 5
X [LWJGL] Binden von Texturen per PNG File und Texture Sheet Spiele- und Multimedia-Programmierung 1
CookieSoft Slick und LWJGL Texture lag Spiele- und Multimedia-Programmierung 13
CookieSoft Slick Texture laden Fehler Spiele- und Multimedia-Programmierung 6
C Java3D Texture Mapping Spiele- und Multimedia-Programmierung 2
S Texture Koordinaten Spiele- und Multimedia-Programmierung 2
J Java3D: Texture-Frage Spiele- und Multimedia-Programmierung 4
O Libgdx - Wiedergabe von Bildschirmgröße ist falsch Spiele- und Multimedia-Programmierung 0
A Spielball bewegt sich nicht richtig, prallt falsch ab Spiele- und Multimedia-Programmierung 7
B Game of Life: Was mache ich falsch? Spiele- und Multimedia-Programmierung 3
Creylon [LWJGL] Textur wird falsch angezeigt Spiele- und Multimedia-Programmierung 12
K Bewegung falsch Spiele- und Multimedia-Programmierung 6
M Karte wird falsch gezeichnet Spiele- und Multimedia-Programmierung 9
H image.setRGB() zeichnet falsch Spiele- und Multimedia-Programmierung 3
R Tutorial falsch?! Spiele- und Multimedia-Programmierung 22

Ähnliche Java Themen

Neue Themen


Oben