編集:したがって、glOrthoは私がやろうとしていたこと(表示したい領域を設定する)を行っているようです.エラーは私のコードにありました. ただし、これは一般的な初心者のエラーである可能性があるため、誰かがまだこれが役立つと思うかもしれません
私は 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();
}