opengl的選擇模式

2021-06-16 18:41:43 字數 1131 閱讀 5488

步驟按順序來,不然會無法拾取,返回-1:

1, 初始化命名緩衝, glselectbuffer(buffer_size, buffer);

2, 設定渲染模式為gl_select 

3, 初始化命名堆疊, glinitnames(), glpushname(0);

示例:void select_object(cpoint point, csize sz){

gluint namebuffer[max_buffer];

glint hits;

glint viewport[4];

glgetintegerv(gl_viewport, viewport);

glselectbuffer(max_buffer, namebuffer);

glrendermode(gl_select);

//初始化名稱棧

glinitnames();

glpushname(0);

glmatrixmode(gl_projection);

glpushmatrix();

glloadidentity();

glupickmatrix(point.x, viewport[3] - point.y, sz.cx, sz.cy, viewport);

gluperspective(fangle, faspect, fnear, ffar);

prender->gldraw(getdc()->getsafehdc());

glmatrixmode(gl_projection);

glpopmatrix();

glflush();

hits = glrendermode(gl_render);

if(hits>0)

{ gluint rs, depth = uint_max;

for(int loop=0; loop

glloadname(id);

這樣在namebuffer裡就會有你可能選中的模型,namebuffer儲存三類資訊:

1.命中發生時名稱棧裡的個數

2.兩個整數,命中物件的深度最大值和最小值

3.名字項,就是繪製的時候的id

所以namebuffer中每四個代表乙個選中的模型。

OPENGL 射線選擇

用過opengl的人,應該都知道,opengl是自帶拾取功能的,但用過的人應該也知道,這功能確實不好用。opengl自帶的選擇功能主要有兩種,名字堆疊 拾取 和讀深度值判斷選擇,但這兩種方法在實際專案中,未必都好用。方法一 名字堆疊的方法,需要切換渲染模式,操作命名堆疊,計算揀選矩陣,檢查選中記錄。...

OpenGL學習 顏色的選擇

opengl支援兩種顏色模式 一種是rgba,一種是顏色索引模式。無論哪種顏色模式,計算機都必須為每乙個畫素儲存一些資料。不同的是,rgba模式中,資料直接就代表了顏色 而顏色索引模式中,資料代表的是乙個索引,要得到真正的顏色,還必須去查索引表。1.rgba顏色 rgba模式中,每乙個畫素會儲存以下...

OpenGL 選擇和反饋

注釋 1,本節內容在opengl 3.1以後已經廢除了,當初opengl其實也就是想讓硬體做,達到加速目的。但現在其實都是軟體做,而且效能更高。因為軟體做的話,有八叉樹之類的,可以先剔除一大部分物體。2,opengl中的選擇和反饋是與普通渲染方式不同的一種特殊的渲染方式。我們使用時一般是先在幀快取中...