x、y、z軸に沿って線を引くコードがあります。私の問題は、彼らが原点付近見えないように、これらの線がクリップされていることをされていますgluLookAt trouble
これはファークリッピング平面の問題のように聞こえるが、私は十分でなければなりませんgluPerspectiveで、にzFar = 50を与えました。それをさらに大きくすることは助けに見えません。他に何がクリッピングを引き起こす可能性がありますか?ここで
は私のコードです:
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();
}
}
更新からglMatrixMode(GL_MODELVIEW);
後glLoadIdentity();
を削除すると、望ましい結果が得られますが、私は理由を理解していません。デフォルトのmodelview行列は単位行列ではありませんか?
更新 - 私は同じコードのCバージョンを書いて、それは必要に応じて動作します。なぜ違い?
のように、現在のマトリックスをマトリックススタックの先頭から取得することができますか? – datenwolf
私は一番上に置いて、それはあなたのために現れませんか? –
オブジェクトを一度描画してから、swapBuffersを 'update()'で繰り返し呼び出すのではなく、フレームごとにオブジェクトを描画する必要があります。後に続くwhileループの始めに、 '// modelview matrix'と' glEnd() 'の間にすべてを入れるべきです。また、ループの開始時に 'glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)'を呼んでください。 – PeterT