2012-03-18 36 views
0

我想知道是否下面就可以在OpenGL中可以輕鬆實現:是否可以在opengl中定義'plot panel'並直接繪製到它們而不是窗口?

  1. 分窗口分成多個小組
  2. 使用的標準座標(0-1),因此,如果窗口得到重新把每個面板到位尺寸,面板將保持在正確的位置
  3. 戰平直接進入先前定義面板

結果應該看起來像下面的圖片之一:

到目前爲止,我已經直接拉我的對象到窗口中,抵消與每個小組各自的價值座標。但是,這並不是一種正確的做事方式。來自經驗豐富的開發人員的任何建議和示例代碼都非常感謝

編輯:我到目前爲止閱讀,使用glScissorglViewport可能是完成我想要的東西的兩種方式,但我不知道有什麼優點和缺點是去要麼路線(您的見解非常歡迎!)。此外,我真的更喜歡定義某種panel,返回它的句柄,並將其吸收。

+0

是Windows中的像素的固定尺寸,或做你想讓他們與窗口大小?如果他們調整大小,你想重新定位內部的東西還是你想讓他們簡單地伸展? – Thomas 2012-03-18 09:47:23

+0

@Thomas主窗口以固定大小開始,但大小可以調整。每個面板都像'1/num_panels * 100%'高和〜90%寬。如果主窗口調整大小,面板應保持各自的百分比大小。 – memyself 2012-03-18 10:10:33

回答

2

如果您使用glScissor(),您只需定義剪切矩形(即繪製的位置)。這可能是你需要的一切。 隨着glViewport()您在幕後調用glScissor()以及更改座標映射到屏幕空間的方式。

如果要將繪圖限制到其中一個面板(不使用本地座標),請使用glScissor()。否則,請使用glViewport()

至於面板,我可能會使用一些抽象基類:

class Panel { 
    // ... 
    virtual void OnDraw(void) = 0; 

    void Draw(void) { 
     glViewport(x, y, w, h); 
     OnDraw(); 
     glViewport(0, 0, parent_w, parent_h); 
    } 
} 
+0

感謝您的代碼。我不太瞭解「如果你想限制繪圖到其中一個面板(不使用本地座標)」部分。你是什​​麼意思的地方座標?理想情況下,我希望能夠爲每個面板傳遞需要繪製的對象的絕對座標(因此每個面板基本上都會像新窗口一樣對待)。 – memyself 2012-03-18 10:17:14

+2

這就是我認爲的相對(或局部)座標。如果你希望面板的角落是例如(0,0),然後使用'glViewport()'。使用'glScissor()'座標仍然是相同的(你只需剪切正在繪製的像素)。 – Mario 2012-03-18 10:22:37

+0

是否可以使用標準化座標定義我的面板位置?它看起來像'glViewport'需要絕對座標。但是,如果我可以使用標準化座標(0-1),那麼面板將始終保持原位並用父窗口調整大小。那可能嗎? – memyself 2012-03-18 10:37:11

相關問題