OpenGL選擇與反饋的知識點
(1)在OpenGL中,提供了選擇和反饋兩種方式,以實現對螢幕上某個物體的資訊提供,達到互動的目的。選擇、反饋和繪製(Rendering)是操作中互相獨立的模式。其中繪製操作是標準的,是光柵化產生片斷過程中的預設模式。在選擇和反饋模式下,沒有片斷產生。因此,沒有針對幀緩衝區的資料修改。在選擇模式下,可以決定在視窗的一些區域中將寫入哪一個基本圖元。在反饋模式下,可以將光柵化了的基本圖元的資訊反饋到應用程式中。進行模式選擇的函式原型如下:
GLint QOpenGLFunctions_1_1::glRenderMode(GLenum mode);
引數Mode控制應用程式處在繪製、選擇或反饋模式。有一下3種定義值:
GL_RENDER 預設值,正常模式
GL_SELECT 選擇模式
GL_FEEDBACK 反饋模式
應用程式保持一種給定的模式直到呼叫glRenderMode()設定不同的引數後為止。
(2)選擇模式將返回當前名稱堆疊的內容。名稱堆疊是一個有整型值的名稱的陣列。在定義所欲繪製的幾何物件的建模程式碼中,將這些名稱賦值並組成名稱堆疊。然後,在選擇模式中,當基本圖元與封閉區域相交時,將產生一個選擇結果。選擇記錄被寫入由函式glSelectBuffer()支援的選擇陣列中,它包括了在進行選擇時名稱堆疊內容的資訊。
(3)在進入選擇模式之前,必須呼叫函式glSelectBuffer()來指定選擇陣列。可以通過glInitNames(初始化名稱堆疊)、glLoadName(將名稱彈出棧)操縱名稱堆疊,也可以用gluPickMatrix(拾取矩陣)進行選擇。
(4)在反饋模式中,每一個被光柵化的基本圖元都產生一個被賦值到反饋陣列中的陣列。每一個數組開始的部分表示基本圖元的種類,後面的值描述了基本圖元的頂點和相關資料。記錄也可以表示點陣圖和畫素矩陣。
(5)在進入反饋模式之前,必須呼叫函式glFeedBackBuffer()來指定反饋陣列。