我有一些代码沿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版本,它可以根据需要运行。为什么不同?
答案 0 :(得分:2)
事实上,经过测试,结果glMatrixMode(GL_PROJECTION_MATRIX);
应该是glMatrixMode(GL_PROJECTION);
。
因此,默认情况下,模型视图似乎处于活动状态,glLoadIdentity()
清除了GLU.gluPerspective(50, width / (float) height, .1f, 50);
的结果
编辑:顺便说一下。如果您想知道GL_PROJECTION_MATRIX
的用途是什么,那就是使用glGetFloatv(GL_PROJECTION_MATRIX,output);
或glGetDoublev(GL_PROJECTION_MATRIX,output);