glReadPixels的使用問題

2021-08-31 10:04:17 字數 1577 閱讀 6582

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

想把螢幕上的二維座標轉換成opengl下面的三維座標

一般常用的方法是:

glint    viewport[4];

gldouble modelview[16];

gldouble projection[16];

glfloat  winx, winy, winz;

glgetintegerv(gl_viewport, viewport); // 得到的是最後乙個設定視口的引數

glgetdoublev(gl_modelview_matrix, modelview);

glgetdoublev(gl_projection_matrix, projection);

winx = pt.x;

winy = viewport[3] - pt.y;

glreadpixels((int)winx, (int)winy, 1, 1, gl_depth_component, gl_float, &winz);

gluunproject(winx, winy, winz, modelview, projection, viewport, &posx, &posy, &posz);

都沒錯。但是,經常會出現winz值為1.0的情況

就像我所做的,功能是移動物體,如果winz的值為1.0之後,物體就跑的沒影了

用trace("point:%f, %f, %f  \t", winx, winy, winz);

trace("pos  :%f, %f, %f \n", posx, posy, posz);

跟蹤一下,居然發現如下的輸出:

point:633.000000, 301.000000, 0.963236

pos  :0.318562, -9.291403, 0.769923

point:633.000000, 298.000000, 1.000000

pos  :39.343056, -1186.848810, -9917.619793

注意這裡:當winz的值變成1.0的時候就出現錯誤了

經過多方查詢資料,發現了乙個重大的問題:

glrealpixels的定義是什麼?

——theglreadpixelsfunction reads a block of pixels from the framebuffer.

問題就出現在這裡

如果framebuffer裡面沒有東西,當然就讀取不出來了啊

所以就會出現上面的錯誤。

經驗證,果不然,如果滑鼠點在空白的位置

point:439.000000, 356.000000, 1.000000   pos  :-2504.841247, -426.216424, -9799.354916

找到問題的癥結了

那麼下面將好好學習一下幀快取,然後把解決方案分享給大家。

給我老師的人工智慧教程打call!

類的使用,物件的使用

一 類的使用 class student school luffycity def eat self print yes defdrink self print drink 檢視print student.dict 增student.teacher gaohui print student.dict...

messagebox的使用(使用整理)

定義 messagebox顯示乙個模態對話方塊,其中包含乙個系統圖示 一組按鈕和乙個簡短的特定於應用程式訊息,如狀態或錯誤的資訊。訊息框中返回乙個整數值,該值指示使用者單擊了哪個按鈕。messagebox hwnd hwnd text,caption pchar type word hwnd 訊息框...

gulp的使用基本使用

1.全域性安裝gulp 目的是在命令列裡使用gulp的命令 2.命令列中cd到專案目錄,區域性安裝gulp 如果不在專案中再次安裝會報錯,據說這樣是為了避免發生版本衝突 3.在專案目錄下新建乙個gulpfile.js檔案 必須這個名字,這個檔案算是乙個配置檔案 編寫我們的需求,以便gulp能按著我們...