編輯:因此,看起來glOrtho做我想做的事情(設置你想查看的區域),錯誤是在我的代碼中。然而,這可能是一個常見的初學者錯誤,所以有人可能仍然覺得這有用OpenGL - 設置可見區域
我正在使用glOrtho(我認爲它應該更容易設置正投影比透視)。總之,我在500x500x500的區域(全部可見區域)繪製小立方體(1x1x1)。我如何告訴OpenGL(使用OpenGL 2)在屏幕上繪製該區域中的所有內容(500,500,500)?
這是我的代碼 - 這是在Java中,但它應該工作一樣...
public void reshape(GLAutoDrawable gLDrawable, int x, int y, int width, int height)
{
final GL2 gl = gLDrawable.getGL().getGL2();
if (height <= 0) // avoid a divide by zero error!
{
height = 1;
}
final float h = (float) width/(float) height;
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(0, 512, 0, 512, 0, 512);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
}
這似乎並沒有這樣的伎倆,我只能看,而不是數百幾個正方形。 ..
這裏是我的立方體的繪製代碼(所有多維數據集的所有座標是0和500之間):
public void display(GLAutoDrawable gLDrawable)
{
final GL2 gl = gLDrawable.getGL().getGL2();
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
for(InterestingVoxel iv: visibleList) {
gl.glTranslatef(iv.getI(), iv.getJ(), iv.getK());
System.out.println("x:"+iv.getI() + ", y:" + iv.getJ() + ", z:" + iv.getK());
drawCube(gl);
}
}
void drawCube(GL2 gl)
{
gl.glBegin(GL2.GL_QUADS);
// front
gl.glVertex3f(0.5f, 0.5f, 0.5f);
gl.glVertex3f(1.5f, 0.5f, 0.5f);
gl.glVertex3f(1.5f, 1.5f, 0.5f);
gl.glVertex3f(0.5f, 1.5f, 0.5f);
// back
gl.glVertex3f(0.5f, 0.5f, -0.5f);
gl.glVertex3f(1.5f, 0.5f, -0.5f);
gl.glVertex3f(1.5f, 1.5f, -0.5f);
gl.glVertex3f(0.5f, 1.5f, -0.5f);
// right
gl.glVertex3f(1.5f, 0.5f, 0.5f);
gl.glVertex3f(1.5f, 0.5f, -0.5f);
gl.glVertex3f(1.5f, 1.5f, -0.5f);
gl.glVertex3f(1.5f, 1.5f, 0.5f);
// left
gl.glVertex3f(0.5f, 0.5f, 0.5f);
gl.glVertex3f(0.5f, 0.5f, -0.5f);
gl.glVertex3f(0.5f, 1.5f, -0.5f);
gl.glVertex3f(0.5f, 1.5f, 0.5f);
// top
gl.glVertex3f(0.5f, 1.5f, 0.5f);
gl.glVertex3f(1.5f, 1.5f, 0.5f);
gl.glVertex3f(1.5f, 1.5f, -0.5f);
gl.glVertex3f(0.5f, 1.5f, -0.5f);
// bottom
gl.glVertex3f(0.5f, 0.5f, 0.5f);
gl.glVertex3f(1.5f, 0.5f, 0.5f);
gl.glVertex3f(1.5f, 0.5f, -0.5f);
gl.glVertex3f(0.5f, 0.5f, -0.5f);
gl.glEnd();
gl.glFlush();
}
我看不出有什麼問題。我們可以看到你的立方體 - 繪製代碼嗎? – Thomas
當然...只是添加了代碼。 – neuromouse