2012-05-11 182 views
1

我正在開發OpenGL中的4分割查看器。一個視圖是透視圖,其他視圖是正交投影(前,左,上)。在glOrtho()視圖中繪製立方體?

我寫了一個從(-1,-1,-1)到(1,1,1)繪製一個立方體的方法,它在透視視圖中工作良好,但是我無法讓它工作我的觀點使用glOrtho(...)。

現在我把它像這樣:

glOrtho(0, width, height, 0, 0, 1); 

有趣的是,該視圖不顯示立方體的。我在OpenGL中爲視圖實現了一個邊框,但它能夠正確顯示。

我正在使用Qt並編寫了QGLWidget的派生類。

+0

假設你的視口也是按高度寬度的,而寬度和高度是你的屏幕座標(比如說800x600),它會使你的立方體在正視圖中寬2像素,否?你的近和遠裁剪平面都是0和1,這可能根據眼睛的位置將立方體剪掉。 – vmpstr

+0

有道理。 ;)那麼你會使用glScale使其僅適用於拼寫視圖,還是有更聰明的方法呢? – fuji

+0

@ j.dog:您通常會選擇爲投影空間體積設置的限制以匹配您的物體的限制。對於將是glOrtho(-aspect,aspect,-1,1,-1,1)的立方體,其中aspect = viewport_width/viewport_height – datenwolf

回答

1

glOrthomodel transformview transform之後的視圖空間中定義了6個剪切平面。所以你應該在Eye Space中指定glOrtho的參數,而不是Screen Space。在你的情況下,它應該是glOrtho(-width/(float)height, width/height, -1.0f, 1.0f, -1.0f, 1.0f),它假定eye position(0.0, 0.0, 0.0)和你的viewportwidthheight。如果近平面位於觀看者的後面(眼睛位置),則NearVal參數glOrtho應該爲負數。你可能想要男人glOrtho4th ChapterCg tuturial可以給你關於不同座標空間的變換的詳細信息,即Object Space,World Space,Eye Space,Clip space,Normalized Device SpaceWindow Space

+0

那麼如何將眼睛位置改爲100,120? – paulm

+0

@paulm眼睛的位置是相對於模型的位置,你可以改變模型的位置,以調整到眼睛。 – toolchainX