2012-03-15 48 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。此外,你正在做方面的整數除法,你需要做浮動部分,否則它會圍繞500/300到1.(500.f/300.f) – Tim 2012-03-15 17:35:26

回答

2

近端和遠端的值指定哪些對象是可見的範圍內(它們限定了近端和遠端剪切planes)。實際上,使用該角度看不到60.0的物體將不可見。

作爲蒂姆已經評論,這是明確寫出浮點值(即500.0f/300.0f)。

但更糟糕的是,在將其設置爲標識(假定在方法開始時,矩陣模式爲GL.GL_MODELVIEW)之前,您需要設置查看矩陣。可能是更好的以下序列:

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

也許你需要調查更多關於相機抽象。

+0

傢伙我不能感謝你夠了... – 2012-03-16 00:30:43

0

就像盧卡所說的那樣,近和遠定義了可見物體的範圍。但最重要的是,絕對不要使用近值或遠值的值(您當前所做的值)爲< = 0,因爲這會導致奇異的投影矩陣(伴隨任何奇怪的渲染結果)。

對於近剪裁平面使用一些相當小的值,但不能太小,否則會導致深度緩衝精度不佳。使用合理的東西,例如在對一個正常的現實世界進行建模時,10cm的近距離通常是一個好的選擇(無論在實際應用中的通用單位數量是多少),因爲你不會看到任何物體更接近任何物體。但它取決於你的應用程序,就像遠遠的價值。

當然,就像蒂姆說的那樣,目前你的長寬比是1.0,因爲你要做整數除法。