У меня есть некоторый код, который рисует линию вдоль осей x, y и z.Моя проблема заключается в том, что эти линии обрезаются так, что они невидимы рядом с источником:
Это звучит как проблема плоскости отсечения, но я дал zFar = 50 для gluPerspective, чего должно быть много.Кажется, что сделать его еще больше не поможет.Что еще может быть причиной отсечения?
Вот мой код:
import static org.lwjgl.opengl.GL11.*;
import org.lwjgl.opengl.*;
import org.lwjgl.util.glu.GLU;
public class Test {
static int width = 300, height = 200;
public static void main(String[] _) throws Exception {
Display.setDisplayMode(new DisplayMode(width, height));
Display.create();
glClear(GL_COLOR_BUFFER_BIT);
// projection matrix
glMatrixMode(GL_PROJECTION_MATRIX);
glLoadIdentity();
GLU.gluPerspective(50, width / (float) height, .1f, 50);
// modelview matrix
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
GLU.gluLookAt(
.8f, .8f, .8f,
0, 0, 0,
0, 1, 0);
// draw a line for each axis
glBegin(GL_LINES);
// x axis in red
glColor3f(1, 0, 0);
glVertex3i(0, 0, 0);
glVertex3i(10, 0, 0);
// y axis in green
glColor3f(0, 1, 0);
glVertex3i(0, 0, 0);
glVertex3i(0, 10, 0);
// z axis in blue
glColor3f(0, 0, 1);
glVertex3i(0, 0, 0);
glVertex3i(0, 0, 10);
glEnd();
Display.update();
// wait for a close event
while (!Display.isCloseRequested()) {
Thread.sleep(20);
Display.processMessages();
}
Display.destroy();
}
}
Обновление - Удаление glLoadIdentity();
после glMatrixMode(GL_MODELVIEW);
дает желаемый результат, ноЯ не понимаю почему.Разве матрица вида модели по умолчанию не является матрицей идентичности?
Обновление - Я написал версию C того же кода, и она работает как нужно.Почему разница?