我有一些代碼沿着x,y和z軸繪製一條線。我的問題是,這些線被修剪,使他們在原點附近無形:gluLookAt問題
這聽起來像一個遠裁剪面的問題,但我給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版本,它的工作原理如下。爲什麼區別?
檢索矩陣堆棧的頂部當前矩陣,你可以提供一個屏幕截圖? – datenwolf 2012-01-11 00:18:50
我把一個放在頂部,它不會顯示出來嗎? – 2012-01-11 02:30:43
也許你應該畫出你的對象的每一幀,而不是繪製一次,然後用'update()'重複調用swapBuffers。你應該在'// modelview matrix'和'glEnd()'之間的所有內容之後的while循環開始。也可以在循環開始時調用'glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)'以獲得良好的測量結果 – PeterT 2012-01-11 07:10:14