2014-03-12 47 views
0

我應該如何在我的OpenGL視口中實現子窗口?在我的視口內,我想在標籤的左側留出一些空間,並在邊緣周圍留出一些空間作爲邊框。我已經確定了所有座標,並且所有顯示都正常。我的問題是在一個子窗口中將事件剪輯到其他窗口。我似乎無法弄清楚OpenGL 3.3,核心上下文的處事方式是什麼。是否到我應該如何在我的OpenGL視口中實現子窗口?

  • 使用per-vertex clipping?
  • 剪刀試驗?
  • a模具測試?
  • 將framebuffer與我窗口的不同部分相關聯?

我應該查看哪些命令?

+0

使用'glViewport(...)'限制區域您的幀緩衝區的幾何投影到哪裏。將屏幕的一部分剪掉或模板化將效率降低,並且會丟失信息 - 有點像電視上的縮放圖片模式。每個頂點剪切也無濟於事,你需要在原始層面上進行剪裁來做這樣的事情。 –

+0

@ AndonM.Coleman:謝謝你的回答,但你確定會剪輯嗎? http://www.opengl.org/discussion_boards/showthread.php/142880-glViewPort-doesn-clip –

+0

當然,它不會剪裁任何東西,剪裁後發生視口映射***。剪切主要由您的投影矩陣定義,視口只是定義了剪裁的幾何圖形被光柵化到的屏幕區域。爲了簡單起見,它定義了***已經被剪切的幾何圖形如何被拉伸以填充屏幕。 –

回答

2

之前我花時間寫一個完整的答案,我想請你確認這是你在你原來的問題進行了說明:

*---------------------------------------* 
| ------------------------------------- | 
| | |        | | 
| | |        | | 
| | |        | | 
|C| A |    B    |C| 
| | |        | | 
| | |        | | 
| |___|_______________________________| | 
*---------------------------------------* 

A = Labels 
B = Main Window 
C = Border 
+0

是的,就是這樣。但是我自己設置矩陣並沒有問題。我的問題是,當我畫B時,它溢出到A和C中,我需要剪裁該輸出。 –

+0

另外,請不要擔心邊框,因爲我認爲這可能會使您的解決方案變得複雜 - 只是想出如何區分A和B將使我更容易實現這一點。謝謝。 –

+0

要清楚的是,當您繪製到B中時,您正在使用具有子窗口B邊界的投影矩陣?如果是這種情況,剪輯將被破壞。在OpenGL中裁剪工作的方式是,如果在投影之後,基元中的任何頂點具有> Clip.W或<-Clip.W的座標,則裁剪邊緣(s)。看看[***這個頁面***](http://www.songho.ca/opengl/gl_projectionmatrix。html)以獲取更多細節,並忽略圖中的術語「視口」(如果您認爲視口與投影矩陣具有相同的尺寸,則此圖僅適用)。 –

相關問題