#java #3d #window #lwjgl
#java #3D #окно #lwjgl
Вопрос:
У меня больше проблем с рендерингом 3D-объектов на Java, вот моя новая проблема, мне удалось импортировать необходимые библиотеки (gluPerspective и т.д.). Однако, Когда я запускаю свое Java-приложение в среде eclipse, оно открывает окно, затем окно остается черным. Вот мой код:
package test;
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 Obj3d {
public static void main(String[] args) {
Obj3d obj = new Obj3d();
obj.start();
}
public void start() {
try {
Display.setDisplayMode(new DisplayMode(800, 600));
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
System.exit(0);
}
init3dGL();
while(!Display.isCloseRequested()) {
clear();
renderCube();
Display.update();
}
Display.destroy();
System.exit(0);
}
public void init3dGL() {
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GLU.gluPerspective(45, 2, -1, 100);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDepthFunc(GL11.GL_LEQUAL);
return;
}
public void renderCube() {
GL11.glBegin(GL11.GL_QUADS);
//front faces
GL11.glNormal3d(0, 0, 1);
GL11.glColor3d(0.0, 1.0, 1.0);
GL11.glVertex3d(5, 5, -5);
GL11.glVertex3d(-5, 5, -5);
GL11.glVertex3d(-5, -5, -5);
GL11.glVertex3d(5, -5, -5);
GL11.glEnd();
return;
}
public void clear() {
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
}
}
Я не вижу свою ошибку в приведенном выше коде, однако я новичок в 3d-программировании lwjgl, так что это может быть связано с отсутствием у меня опыта. Пожалуйста, наберитесь терпения, хотя я быстро учусь. Заранее спасибо.
Ответ №1:
Я думаю, что использование отрицательного ближнего расстояния не такая уж хорошая идея. Попробуйте
GLU.gluPerpective(45, 2, 0.1, 100);
И это 2
там должно быть фактически соотношением сторон вашего окна (ширина / высота), в вашем случае 1.333 = 800 / 600
.
Комментарии:
1. Он по-прежнему отображает пустой экран, на котором ничего нет.
Ответ №2:
Я ответил на свой собственный вопрос. В дополнение к ответам выше, я также неправильно очистил экран и не вернул метод. Неосторожные ошибки.