2013-05-09 118 views
1

我試圖通過使用glFrustum限制查看量來剪輯屏幕上的圖像。在Glfrustum的官方文檔中提到,left, right, top, bottom, near, far是裁剪的座標。我認爲他們是屏幕座標,並試圖做到:OpenGL的標準化座標

glFrustum(100, 924, 100, 668, 3, 1000); 

上面沒有顯示任何東西給我在屏幕上。所以,我只是看着某處,看到一些代碼如下(但爲什麼這些座標負):

glFrustum(-1, 1, -1, 1, 0.5, 1000); 

我用excat同樣的事情,並開始在屏幕上獲得圖像的某些部分。隨後,我開始撥弄near的座標,並注意觀看音量如何變化。

glFrustum(-10,10,-10,10,10,1000); 
glFrustum(-100,100,-100,100,100,1000); 
glFrustum(-0.5,0.5,-0.5,0.5,0.5,1000); 

所有上面的方法給圖像用相同的輸出到我在屏幕上。但是我觀察到大多數使用glFrustum的地方,我注意到這些值是從[-1,1](如here)和人們在規範化的範圍內討論計算的地方使用的。爲什麼在歸一化值方面對left, right, bottom, top, near, far的計算很重要(近遠還包括在歸一化值中?)?是否可以使用屏幕座標中的值執行相同的操作?

回答

2

首先,glFrustum是獨立於你的屏幕分辨率。

這個函數定義了一個場景將被繪製的體積,也就是說,拋出這個體積的你的screne的所有元素將被忽略/切割。 glFrustum的Coordenates與您的場景相關,而不是您的屏幕。

enter image description here

在考慮採取對於正確表示,其他參數必須被正確地像場景旋轉/平移配置等

glFrustum(-10,10,-10,10,10,1000); 
glFrustum(-100,100,-100,100,100,1000); 
glFrustum(-0.5,0.5,-0.5,0.5,0.5,1000); 

所有上述均給出相同的輸出我在屏幕上的圖像

不完全如果你的3D模型接近POV(camara) ,例2將切斷它,例3不會。但是,當您按「左」,「頂部」,「底部」和「右側」的比例增加/減少「近」距離時,結果類似。