分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!
想把螢幕上的二維座標轉換成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能按著我們...