textures does'nt appear

Started by Rasengan, April 29, 2006, 15:09:22

Previous topic - Next topic

Rasengan

Hey all!

I'm trying a few tutorials from NeHe's site, LWJGL versions of course,  it's seems to be strange that the problem does come from the code...but the textures does not appear.
For example, the textured cube appear completely gray...what's wrong??
There is the complete code from Lesson06:

/*
 *      This Code Was Created By Jeff Molofee 2000
 *      A HUGE Thanks To Fredric Echols For Cleaning Up
 *      And Optimizing The Base Code, Making It More Flexible!
 *      If You've Found This Code Useful, Please Let Me Know.
 *      Visit My Site At nehe.gamedev.net
 */

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.input.Keyboard;
import static  org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.glu.GLU.*;
import static org.lwjgl.devil.IL.*;

/**
 * @author Mark Bernard
 * date:    16-Nov-2003
 *
 * Port of NeHe's Lesson 6 to LWJGL
 * Title: Texture Mapping
 * Uses version 0.8alpha of LWJGL http://www.lwjgl.org/
 *
 * Be sure that the LWJGL libraries are in your classpath
 *
 * Ported directly from the C++ version
 *
 * 2004-05-08: Updated to version 0.9alpha of LWJGL.
 *             Changed from all static to all instance objects.
 * 2004-09-21: Updated to version 0.92alpha of LWJGL.
 * 2004-12-17: Updated to version 0.94alpha of LWJGL and to use
 *             DevIL for image loading.
 */
public class Lesson06 {
	private boolean done = false;
	private boolean fullscreen = false;
	private final String windowTitle = "NeHe's OpenGL Lesson 6 for LWJGL (Texture Mapping)";
	private boolean f1 = false;
	private DisplayMode displayMode;
	
	private float xrot;            // X Rotation ( NEW )
	private float yrot;            // Y Rotation ( NEW )
	private float zrot;            // Z Rotation ( NEW )
	private int texture;           // Storage For One Texture ( NEW )
	
	public static void main(String args[]) {
		boolean fullscreen = false;
		if(args.length>0) {
			if(args[0].equalsIgnoreCase("fullscreen")) {
				fullscreen = true;
			}
		}
		
		Lesson06 l6 = new Lesson06();
		l6.run(fullscreen);
	}
	public void run(boolean fullscreen) {
		this.fullscreen = fullscreen;
		try {
			init();
			while (!done) {
				mainloop();
				render();
				Display.update();
			}
			cleanup();
		}
		catch (Exception e) {
			e.printStackTrace();
			System.exit(0);
		}
	}
	private void mainloop() {
		if(Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) {       // Exit if Escape is pressed
			done = true;
		}
		if(Display.isCloseRequested()) {                     // Exit if window is closed
			done = true;
		}
		if(Keyboard.isKeyDown(Keyboard.KEY_F1) && !f1) {    // Is F1 Being Pressed?
			f1 = true;                                      // Tell Program F1 Is Being Held
			switchMode();                                   // Toggle Fullscreen / Windowed Mode
		}
		if(!Keyboard.isKeyDown(Keyboard.KEY_F1)) {          // Is F1 Being Pressed?
			f1 = false;
		}
	}
	
	private void switchMode() {
		fullscreen = !fullscreen;
		try {
			Display.setFullscreen(fullscreen);
		}
		catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	private boolean render() {
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
		
		glLoadIdentity(); // Reset The Current Modelview Matrix
		
		glTranslatef(0.0f, 0.0f, -5.0f); // Move Into The Screen 5 Units
		glRotatef(xrot, 1.0f, 0.0f, 0.0f); // Rotate On The X Axis
		glRotatef(yrot, 0.0f, 1.0f, 0.0f); // Rotate On The Y Axis
		glRotatef(zrot, 0.0f, 0.0f, 1.0f); // Rotate On The Z Axis
		glBindTexture(GL_TEXTURE_2D, texture); // Select Our Texture
		glBegin(GL_QUADS);
			// Front Face
			glTexCoord2f(0.0f, 0.0f);
			glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Left Of The Texture and Quad
			glTexCoord2f(1.0f, 0.0f);
			glVertex3f(1.0f, -1.0f, 1.0f); // Bottom Right Of The Texture and Quad
			glTexCoord2f(1.0f, 1.0f);
			glVertex3f(1.0f, 1.0f, 1.0f); // Top Right Of The Texture and Quad
			glTexCoord2f(0.0f, 1.0f);
			glVertex3f(-1.0f, 1.0f, 1.0f); // Top Left Of The Texture and Quad
			// Back Face
			glTexCoord2f(1.0f, 0.0f);
			glVertex3f(-1.0f, -1.0f, -1.0f); // Bottom Right Of The Texture and Quad
			glTexCoord2f(1.0f, 1.0f);
			glVertex3f(-1.0f, 1.0f, -1.0f); // Top Right Of The Texture and Quad
			glTexCoord2f(0.0f, 1.0f);
			glVertex3f(1.0f, 1.0f, -1.0f); // Top Left Of The Texture and Quad
			glTexCoord2f(0.0f, 0.0f);
			glVertex3f(1.0f, -1.0f, -1.0f); // Bottom Left Of The Texture and Quad
			// Top Face
			glTexCoord2f(0.0f, 1.0f);
			glVertex3f(-1.0f, 1.0f, -1.0f); // Top Left Of The Texture and Quad
			glTexCoord2f(0.0f, 0.0f);
			glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Left Of The Texture and Quad
			glTexCoord2f(1.0f, 0.0f);
			glVertex3f(1.0f, 1.0f, 1.0f); // Bottom Right Of The Texture and Quad
			glTexCoord2f(1.0f, 1.0f);
			glVertex3f(1.0f, 1.0f, -1.0f); // Top Right Of The Texture and Quad
			// Bottom Face
			glTexCoord2f(1.0f, 1.0f);
			glVertex3f(-1.0f, -1.0f, -1.0f); // Top Right Of The Texture and Quad
			glTexCoord2f(0.0f, 1.0f);
			glVertex3f(1.0f, -1.0f, -1.0f); // Top Left Of The Texture and Quad
			glTexCoord2f(0.0f, 0.0f);
			glVertex3f(1.0f, -1.0f, 1.0f); // Bottom Left Of The Texture and Quad
			glTexCoord2f(1.0f, 0.0f);
			glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Right Of The Texture and Quad
			// Right face
			glTexCoord2f(1.0f, 0.0f);
			glVertex3f(1.0f, -1.0f, -1.0f); // Bottom Right Of The Texture and Quad
			glTexCoord2f(1.0f, 1.0f);
			glVertex3f(1.0f, 1.0f, -1.0f); // Top Right Of The Texture and Quad
			glTexCoord2f(0.0f, 1.0f);
			glVertex3f(1.0f, 1.0f, 1.0f); // Top Left Of The Texture and Quad
			glTexCoord2f(0.0f, 0.0f);
			glVertex3f(1.0f, -1.0f, 1.0f); // Bottom Left Of The Texture and Quad
			// Left Face
			glTexCoord2f(0.0f, 0.0f);
			glVertex3f(-1.0f, -1.0f, -1.0f); // Bottom Left Of The Texture and Quad
			glTexCoord2f(1.0f, 0.0f);
			glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Right Of The Texture and Quad
			glTexCoord2f(1.0f, 1.0f);
			glVertex3f(-1.0f, 1.0f, 1.0f); // Top Right Of The Texture and Quad
			glTexCoord2f(0.0f, 1.0f);
			glVertex3f(-1.0f, 1.0f, -1.0f); // Top Left Of The Texture and Quad
		glEnd();
		
		xrot += 0.3f; // X Axis Rotation
		yrot += 0.2f; // Y Axis Rotation
		zrot += 0.4f; // Z Axis Rotation
		
		return true;
	}
	private void createWindow() throws Exception {
		Display.setFullscreen(fullscreen);
		DisplayMode d[] = Display.getAvailableDisplayModes();
		for (int i = 0; i < d.length; i++) {
			if (d[i].getWidth() == 640
					&& d[i].getHeight() == 480
					&& d[i].getBitsPerPixel() == 32) {
				displayMode = d[i];
				break;
			}
		}
		Display.setDisplayMode(displayMode);
		Display.setTitle(windowTitle);
		Display.create();
	}
	
	private void init() throws Exception {
		createWindow();
		create();
		
		loadTextures();
		initGL();
	}
	
	private void loadTextures() {
		texture = loadTexture("Data/NeHe.png");
	}
	
	private void initGL() {
		glEnable(GL_TEXTURE_2D); // Enable Texture Mapping
		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
		
		glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
		glLoadIdentity(); // Reset The Projection Matrix
		
		// Calculate The Aspect Ratio Of The Window
		gluPerspective(45.0f, (float) displayMode.getWidth() / (float) displayMode.getHeight(), 0.1f, 100.0f);
		glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
		
		// Really Nice Perspective Calculations
		glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
	}
	private void cleanup() {
		Display.destroy();
	}
	/**
	 * Texture loading using DevIL
	 * Example created by Mark Bernard
	 */
	private int loadTexture(String path) {
		IntBuffer image = ByteBuffer.allocateDirect(4).order(ByteOrder.nativeOrder()).asIntBuffer();
		ilGenImages(image);
		ilBindImage(image.get(0));
		ilLoadImage(path);
		ilConvertImage(IL_RGB, IL_BYTE);
		ByteBuffer scratch = ByteBuffer.allocateDirect(ilGetInteger(IL_IMAGE_WIDTH) * ilGetInteger(IL_IMAGE_HEIGHT) * 3);
		ilCopyPixels(0, 0, 0, ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), 1, IL_RGB, IL_BYTE, scratch);
		
		// Create A IntBuffer For Image Address In Memory
		IntBuffer buf = ByteBuffer.allocateDirect(4).order(ByteOrder.nativeOrder()).asIntBuffer();
		glGenTextures(buf); // Create Texture In OpenGL
		
		// Typical Texture Generation Using Data From The Image
		glBindTexture(GL_TEXTURE_2D, buf.get(0));
		
		// Linear Filtering
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
		
		// Generate The Texture
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ilGetInteger(IL_IMAGE_WIDTH), 
				ilGetInteger(IL_IMAGE_HEIGHT), 0, GL_RGB, GL_UNSIGNED_BYTE, scratch);
		
		return buf.get(0); // Return Image Address In Memory
	}
}


It is a possible bug due to the new LWJGL version and this code written with 0.8alpha?

note: from the loadTexture method: ilGenImages(1, image) does'nt work with the first parameter...

mcsquared

I get the exact same problem, does anyone know whats wrong?

Evil-Devil

Quote from: mcsquared on February 15, 2007, 21:37:57
I get the exact same problem, does anyone know whats wrong?
Without the code, not.

mcsquared

The code is exactly the same as the Nehe Lesson 6 tutorial and given in the first post on this topic. 

I can't get the actual example to work.  At the moment, the cube in the tutorial doesn't display the texture.