Mad Props to elias4444 for the great .OBJ loader! Great Work! Just thought I'd give back to the community, below is a basic LWJGL program which will load an OBJ mesh and display/spin it.
package JavaGL;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.glu.GLU;
//MAD PROPZ to elias4444 @ LWJGL forums for the great OBJ LOADER
import tools.Object3D;
public class MeshPolys {
public static boolean done = false;
public static String windowTitle = "Crash0veride007 JavaGL";
public static DisplayMode displayMode;
public static Object3D mesh;
public static float angle =0.0f;
public static void main(String[] args) {
MeshPolys runit = new MeshPolys();
runit.run();
}
public void run() {
long startTime = System.currentTimeMillis() + 5000;
long fps = 0;
try {
init();
while (!done) {
MainLoop();
Display.update();
if (startTime > System.currentTimeMillis()) {
fps++;
} else {
long timeUsed = 5000 + (startTime - System.currentTimeMillis());
startTime = System.currentTimeMillis() + 5000;
String outdata = fps + " frames in " + (float) (timeUsed / 1000f) + " seconds = "+ (fps / (timeUsed / 1000f))+" FPS";
System.out.println( outdata );
Display.setTitle(windowTitle + " " + outdata);
fps = 0;
}
}
cleanup();
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
}
public void MainLoop() {
rendershit();
if(Display.isCloseRequested()) {
done = true;
}
}
public void createWindow() throws Exception {
DisplayMode d[] = Display.getAvailableDisplayModes();
for (int i = 0; i < d.length; i++) {
if (d.getWidth() == 1024
&& d.getHeight() == 768
&& d.getBitsPerPixel() == 32) {
displayMode = d;
break;
}
}
Display.setDisplayMode(displayMode);
Display.setTitle(windowTitle);
Display.create();
}
public void init() throws Exception {
createWindow();
initGL();
loadmesh();
}
public void initGL() {
GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
GL11.glClearDepth(1.0);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDepthFunc(GL11.GL_LEQUAL);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GLU.gluPerspective(80.0f,(float) displayMode.getWidth() / (float) displayMode.getHeight(),0.1f,1000.0f);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);
GLU.gluLookAt(0.0f, 0.0f, 10.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
}
public void loadmesh() {
//FileReader f_read;
String path ="mesh/skull.obj";
String matpath = "mesh/";
try {
InputStream r_path = getClass().getResourceAsStream(path);
BufferedReader b_read = new BufferedReader(new InputStreamReader(r_path));
//f_read = new FileReader(r_path);
//BufferedReader b_read = new BufferedReader(f_read);
mesh = new Object3D(b_read,true, matpath);
r_path.close();
b_read.close();
} catch (IOException e) {
System.out.println("Could not open file: " + path);
}
}
public void rendershit() {
GL11.glColor3f(0.0f, 1.0f, 0.0f);
GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GL11.glPushMatrix();
GL11.glRotatef(angle, 1.0f, .0f, 0.0f);
GL11.glRotatef(angle, 0.0f, 1.0f, 0.0f);
GL11.glRotatef(angle, 0.0f, 0.0f, 1.0f);
GL11.glPushMatrix();
GL11.glScalef(10.0f,10.0f,10.0f);
mesh.opengldraw();
GL11.glPopMatrix();
angle = (angle+1.0f)%360;
GL11.glPopMatrix();
GL11.glFlush();
}
public void cleanup() {
Display.destroy();
}
}