편집 : 그래서 glOrtho가 내가하고 싶은 일을하고있는 것 같습니다 (보고 싶은 영역을 설정합니다), 오류가 내 코드에있었습니다. 그러나 일반적인 초보자 오류 일 수 있으므로 누군가가 여전히 유용하다고 생각할 수도 있습니다.OpenGL - 보이는 영역 설정
저는 glOrtho를 사용하고 있습니다 (투시 투영을 원근감보다 쉽게 설정해야한다고 생각합니다). 어쨌든, 500x500x500의 영역 (모든 보이는 영역)에 작은 큐브 (1x1x1)를 그립니다. OpenGL (OpenGL 2 사용)이 그 영역에있는 모든 것을 화면에 그려 넣으려면 어떻게해야합니까 (500,500,500)? 이 자바이지만,이 트릭을하지 않는 것 같은 ...
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();
}
, 나는 단지 대신 수백 몇 사각형을 볼 수 있습니다 작동합니다 -
이 내 코드입니다.
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