2012-10-15 50 views
7

不久前,我嘗試了OpenGL指南中的一個程序,該程序據說是雙緩衝的;它在屏幕上顯示一個旋轉的矩形。不幸的是,我沒有這本書了,我一直沒有找到一個明確,直接的緩衝區定義。我的猜測是,這是一個繪製事物的「地方」,其中使用很多可能會像分層一樣?OpenGL中的緩衝區究竟是什麼,我如何使用多個緩衝區以獲得優勢?

如果是這樣的話,我想知道如果我可以使用多個緩衝區來爲多邊形剪裁程序提供優勢。我有一個很好的小窗口,允許用戶在屏幕上繪製多邊形,還有一個實用程序可以在多邊形上拖動和繪製選擇框。當用戶繪製了選擇矩形並放開鼠標時,將根據矩形邊界裁剪多邊形。

這是足夠可行的,但我也希望用戶能夠重新開始:當按下轉義鍵時,剪輯框應該消失,並且原始多邊形應該被恢復。由於我一個像素一個像素地工作,所以想要弄清楚如何將矩形像素顏色改變回像背景或特定多邊形的顏色一樣是非常困難的,這取決於它們被繪製的位置(除非我找到一種在每個多邊形像素被繪製時保存顏色的方式,但似乎過度)。我想知道是否有助於給這個矩形設置自己的緩衝區,希望它能像一個透明的層,可以很容易地清除掉(?)這是緩衝區可以使用的方式,還是我需要找到另一個解決方案?

回答

8

的OpenGL不知道多個類型的緩衝區:

  • 幀緩存:的哪個繪圖操作將被定向在緩衝器改變像素值存儲器部分。默認情況下,OpenGL具有屏幕緩衝區,可以分爲前臺緩衝區和後臺緩衝區,在後臺緩衝區中繪圖操作不可見並在完成時交換到前臺。除了OpenGL使用深度緩衝區來深度測試Z排序實現之外,還使用了一個模板緩衝區來限制渲染到像幀緩衝區的選定部分一樣的切出(= stencil)。過去有輔助和累積緩衝區。然而,這些已經被所謂的幀緩衝對象所取代,這些幀緩衝對象是用戶創建的對象,將幾個紋理或者渲染緩衝器合併到可以渲染到的新幀緩衝器中。

  • 渲染緩衝區:用戶創建的渲染目標,將被附加到幀緩衝區對象。

  • 緩衝區對象(頂點和像素):用戶定義的數據存儲。用於幾何和圖像數據。

  • 紋理:紋理是排序緩衝區,即他們持有的數據,這可能是來源繪圖操作

用OpenGL通常的方法是重新呈現整個場景,每當有新的變化。如果要保存這些繪製操作,可以將幀緩衝區的內容複製到紋理,然後將該紋理繪製到單個四邊形,並使用選擇的橡皮筋矩形將其重繪。