2012-03-15 1 views
2

나는 init() 메서드를 가지고 있으며 Perspective 렌더링을 만들려고합니다. 아래 코드는 지금까지 가지고 있지만, 내가 넘기고있는 숫자는 gluPerspective(fovy, aspect, zNear, zFar)입니다. 나는 fovy이 시야 (60도)이고, aspect이 가로 세로 비율 (너비/높이)이라고 생각하지만, zNearzFar이 무엇인지 모르겠다.jogl에서 gluPerspective()를 어떻게 사용합니까?

public void init(GLAutoDrawable gld) { 
    //We will use the default ViewPort 

    GL gl = gld.getGL(); 
    glu = new GLU(); 

    gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 


    glu.gluLookAt(
      25, 15, 0, // eye 
      25, 15, 30, // at 
      0, 1, 0 // up 
      ); 



    // Set up camera for Orthographic projection: 
    gl.glMatrixMode(GL.GL_PROJECTION); 
    gl.glLoadIdentity(); 
    glu.gluPerspective(60, 500/300, 0.0, 60.0); 

    gl.glMatrixMode(GL.GL_MODELVIEW); 
    gl.glLoadIdentity(); 

} 
+1

맨 페이지를 읽었습니까? http://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml. 또한 aspect를 위해 정수 나누기를하고 있는데, float division을 대신 수행해야합니다. 그렇지 않으면 500/300을 1로 반올림합니다. (500.f/300.f) – Tim

답변

2

가깝고 먼 값이 개체가 표시되는 범위 (그들이 가깝고 먼 planes 패스를 정의하는)을 지정. 실제로 60.0보다 멀리있는 오브젝트는 해당 Perspective를 사용하여 표시되지 않습니다.

Tim 이미 주석이 달렸으므로 부동 소수점 값 (즉, 500.0f/300.0f)을 명시 적으로 쓰는 것이 좋습니다.

하지만 더 나쁘게는 (매트릭스 모드가 GL.GL_MODELVIEW 인 방법의 시작 부분에서 가정하여) ID를 설정하기 전에 look-at 매트릭스를 설정하십시오. 아마도 다음 순서가 더 좋습니다 :

gl.glMatrixMode(GL.GL_MODELVIEW); 
gl.glLoadIdentity(); 
glu.gluLookAt(...); 

아마도 카메라 추상화에 대해 더 자세히 조사해야 할 수도 있습니다.

+0

사람들은 충분히 감사합니다 ... –

0

Luca는 이미 말했듯이 가시적 인 물체의 범위를 거의 정의하고 있습니다. 하지만 가장 중요한 점은 near 또는 far 값 (현재 수행중인 값)에 < = 0 값을 사용하지 마십시오. 결과가 이상한 렌더링 결과가있는 단 일 투영 행렬이됩니다.

근거리 클리핑 평면에 대해 다소 작은 값을 사용하지만 깊이 버퍼 정밀도가 좋지 않을 정도로 너무 작지는 않습니다. 예를 들어 정상적인 현실 세계를 모델링 할 때와 같이 합리적인 무언가를 사용하십시오. 10cm의 근거리 거리가 일반적으로 좋은 선택입니다 (실제 응용 프로그램에서 의미하는 일반 단위의 양이든간에). . 그러나 그것은 먼 값과 같은 응용 프로그램에 따라 다릅니다.

물론 Tim이 말한 것처럼, 화면 비율은 1.0입니다. 왜냐하면 정수 분할을하기 때문입니다.