我花了大約2天的時間試圖找出如何使用lwjgl製作3d對象,並且什麼也沒找到。我可以很容易地渲染2D對象,當我嘗試渲染3D對象時,程序崩潰了,或者打開了黑屏,現在我正在使用Eclipse,並且在該環境中運行它(我不'不知道這是否是問題)。如果有人能指點我一個很好的教程,或只是給我一個解釋我做錯了什麼,那將不勝感激。這裏是我的代碼:使用輕量級Java遊戲庫(LWJGL)的3D對象需要的建議
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;
}
}
****** EDIT 2 ****** ,如果你有什麼對上面的回答貢獻請在這裏發表的答案:你使用二維正投影視圖 How to import lwjgl_util
感謝您的答覆,我想試試。 – JAW1025
好吧,我查看了lwjgl網站上的gluPerspective,並且我知道它需要四個浮點值,但是如何使用它?以及浮點值的含義是什麼? – JAW1025
不認爲我能解釋它比這個鏈接更好http://profs.sci.univr.it/~colombar/html_openGL_tutorial/en/03basic_transforms_018.html在nearClip點之前和farClip點之後的任何東西剪裁(即未繪製),方面通常是屏幕的比例(即寬度/高度),而fov是視野的角度。 – Gavin