【发布时间】:2011-10-31 19:55:53
【问题描述】:
我花了大约 2 天的时间试图找出如何使用 lwjgl 制作 3d 对象,但一无所获。我可以轻松渲染 2d 对象,当我尝试渲染 3d 对象时,程序崩溃或打开了黑屏,现在,我正在使用 Eclipse,并且我正在那个环境中运行它(我没有不知道是不是这个问题)。如果有人可以向我指出一个好的教程,或者只是给我一个解释我做错了什么,那将不胜感激。这是我的代码:
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
public class Objects {
public static void main(String[] args) {
Objects objects = new Objects();
objects.start();
}
public void start() {
try {
Display.setDisplayMode(new DisplayMode(800, 600));
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
System.exit(0);
}
initGL();
while(!Display.isCloseRequested) {
Cube();
Display.update();
}
Display.destroy();
}
public void initGL() {
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, 800, 600, 0, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
return;
}
public void cube() {
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
//front face
GL11.glColor3d(0.0, 1.0, 1.0);
GL11.glVertex3d(1.0, 1.0, -1.0);
GL11.glVertex3d(-1.0, 1.0, -1.0);
GL11.glVertex3d(-1.0, -1.0, -1.0);
GL11.glVertex3d(1.0, -1.0, -1.0);
//side face
GL11.glColor3d(1.0, 0.0, 0.0);
GL11.glVertex3d(1.0, 1.0, -1.0);
GL11.glVertex3d(1.0, 1.0, -3.0);
GL11.glVertex3d(1.0, -1.0, -3.0);
GL11.glVertex3d(1.0, -1.0, -1.0);
...(I kept going like this for the rest of the faces)
return;
}
***************编辑***************
我已经阅读了你的两个答案,并基于它制作了一个 java lwjgl 代码,但是当我尝试在 Eclipse 环境中运行它时,它给了我错误:
usage:
XPMFile <file>
java.lang.ArrayIndexOutOfBoundsException: 0
at org.lwjgl.util.XPMFile.main(XPMFile.java:260)
所以,这里再次是我的代码:
package testing;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.glu.GLU;
public class CubeRender {
public static void main(String[] args) {
CubeRender cube = new CubeRender();
cube.start();
}
public void start() {
try {
Display.setDisplayMode(new DisplayMode(800, 600));
Display.create();
} catch(LWJGLException e) {
e.printStackTrace();
System.exit(0);
}
initGL();
while(!Display.isCloseRequested()) {
renderCube();
Display.update();
}
Display.destroy();
}
public void initGL() {
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GLU.gluPerspective(45, 100, 1, 100);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDepthFunc(GL11.GL_LEQUAL);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
}
public void renderCube() {
double x = 1;
double y = 1;
double z = -1;
//front face
GL11.glBegin(GL11.GL_QUADS);
GL11.glNormal3d(0, 0, 1);
GL11.glColor3d(0.0, 1.0, 1.0);
GL11.glVertex3d(x, y, z);
GL11.glVertex3d(x-2, y, z);
GL11.glVertex3d(x-2, y-2, z);
GL11.glVertex3d(x, y-2, z);
GL11.glEnd();
//right face
GL11.glBegin(GL11.GL_QUADS);
GL11.glNormal3d(-1, 0, 0);
GL11.glVertex3d(x, y, z);
GL11.glVertex3d(x, y, z-2);
GL11.glVertex3d(x, y-2, z-2);
GL11.glVertex3d(x, y-2, z);
GL11.glEnd();
return;
}
}
******编辑 2****** 如果您对上述答案有任何贡献,请在此处发布答案: How to import lwjgl_util
【问题讨论】: