2011-03-14 39 views
3

我正在學習OpenGL,並與gluPerspective有問題。下面是我使用的代碼中的init()如何增加openGL停止繪製對象的距離(zfar/gluPerspective)?

// Calculate The Aspect Ratio Of The Window 
// The parameters are: 
// (view angle, aspect ration of the width to the height, 
// The closest distance to the camera before it clips, 
// FOV, Ratio, The farthest distance before it stops drawing) 
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height, 0.5f, 3000.0f); 

我的現場作品的權利..但只要我去一點點遠離我的對象,他們dissapear(如圖像的紅球)。 :Frustrum example Web where I took graph from

我知道紅球在視野之外,不會顯示。所以我想要的是增加它停止繪製的距離。我試圖增加3000.0f,但不工作!

gluPerspective(45.0f,(GLfloat)width/(GLfloat)height, 0.5f, 3000000.0f); 

所以我的問題是:我怎樣才能提高距離openGL的地方停繪圖對象?

有關該問題的一些圖片: Pic1 Pic2

+0

我花了很多谷歌搜索,發現了很多信息(如http://webcache.googleusercontent.com/search?q=cache:-rnJ929O4dgJ:www.sjbaker.org/steve/omniv/love_your_z_buffer.html+ http://www.sjbaker.org/steve/omniv/love_your_z_buffer.html&cd=1&hl=zh-CN&ct=clnk&gl=uk&source=www.google.co.uk),但我不完全理解爲什麼不工作,我應該怎麼做它。請記住我正在學習OpenGL。 – 2011-03-14 15:43:43

回答

4

我想通了,發生了什麼事,所以我回答這個自己幫助其他人的未來:

更改zfar工作正常。我的問題是(不包括在簡化問題中)是我的天空盒。 Skybox很小,隱藏着天空的物體。在圖2中很容易看到!

所以,如果你有類似的問題,只需再次檢查你的天空盒。如果這是一個zfar問題,應該 是黑色的,而不是有天空的紋理!

+3

只需繪製禁用深度寫入的天空盒:glDepthMask(GL_FALSE); draw_skybox(); glDepthMask(GL_TRUE); – datenwolf 2011-03-14 17:08:35

+0

好點。沒有看到鏈接的圖片:) – Thomas 2011-03-14 17:25:45

+0

我在評論中添加了圖片到你的答案,後來又添加到原來的問題! – 2011-03-14 18:01:12

3

近及遠值定義深度緩存的精度。 near和far之間的比率越高,您獲得的深度緩衝精度錯誤就越多。因此,您的深度緩衝區可能實際上允許繪製對象,但是如果它們很小且彼此靠近,它們仍然可能不可見(被拒絕或被透支)。

如果您從3000.0f增加到10000.0f,它可能仍然有效。你的物體有多大?

爲什麼你首先需要那麼大的觀看距離?也許還有其他方法可以更好地滿足您的需求。

+0

**物體尺寸**:我畫了一個1.0f大小的大建築物(吸引輪),然後我把它縮小到70.0f。 您可以在此處看到對象大小:http://i1188.photobucket.com/albums/z416/cad_vga/Attraction/Capt1.png 而我在這裏遇到的問題是:http://i1188.photobucket.com/相冊/ z416/cad_vga/Attraction/Capt2.png – 2011-03-14 16:46:50