OpenGL-反饋

1. OpenGL的反饋機制

 

反饋和選擇具有一個相似之處,在這兩種模式下,不會產生任何像素,並且屏幕被凍結。

在選擇模式下,一些已分配的名稱被返回到一個整形數組中;在反饋模式下,與經過變換的圖元有關的一些信息被返回到一個浮點型數組中。

 

2. 使用步驟

 

//在繪製了場景之後,開始進入以下代碼

 

(1)

GLfloat feedBuffer[1024];

//指定保存反饋數據的數組,GL_3D_COLOR表示返回的頂點數據由座標(x,y,z)和顏色(r,g,b,a)組成

glFeedbackBuffer(1024, GL_3D_COLOR, feedBuffer);

 

(2)

glRenderMode(GL_FEEDBACK);  //進入反饋模式

 

(3)

//繪製兩條線

glBegin(GL_LINE_STRIP);

glNormal3f( 0.0, 0.0,1.0);

glVertex3f(30.0, 30.0, 0.0);

glVertex3f(50.0, 60.0, 0.0);

glVertex3f(70.0, 40.0, 0.0);

glEnd();

 

glPassTrough(1.0);  //在圖元之間增加標記

 

//繪製一個點

glBegin(GL_POINTS);

glNormal3f(0.0, 0.0, 1.0);

glVertex3f(50.0, 50.0, 0.0);

glEnd();

 

glFlush();

 

(4)

GLuint size = glRenderMode(GL_RENDER);  //返回繪製模式,同時獲得返回的圖元的個數

 

(5)

//處理返回的圖元數組

GLuint count = size;

GLfloat token;

 

while( count )

{

    //獲取反饋數據的第一個字節,是一個表示圖元類型的代碼

    //可以是GL_POINT_TOKEN, GL_LINE_TOKEN等等

    token = buffer[size - count];  

    count--;

 

    if( token == GL_PASS_THROUGH ) //如果圖元是插入的標記

    { count--; }

    else if( token == GL_POINT_TOKEN ) //如果圖元是點,則移動7個位置(x,y,z,r,g,b,a)

    { count -= 7; }

    else if( token == GL_LINE_TOKEN ) //如果圖元是線,則移動14個位置(2個點的數據)

    { count -= 14; }

    else if( token == GL_LINE_RESET_TOKEN ) //如果圖元是線,切對於點畫模式進行了重置

    { count -= 14; }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章