在opengl中我們知道的世界矩陣(world matrix)/檢視矩陣(view matrix)以及投影矩陣(projection matirx)中
model:世界矩陣確定乙個統一的世界座標,主要針對模型的平移,旋轉,縮放,錯切等功能,將模型由區域性空間轉換為世界空間.
view:檢視矩陣就是我們能看到的那部分場景,有攝像機/觀察者的位置等資訊(設定滑鼠移動,滾輪等效果),將所有世界座標轉換為觀察座標.
projection:投影矩陣就是把三維體的平面投影在二維的平面顯示.
glsl執行在gpu,其通過介面實現和cpu之間的資料轉換.
opengl程式涉及到兩種型別的處理單元cpu和gpu.
opengl主程式有cpu呼叫執行,影象處理部分通過glsl交給gpu執行.
cpu和gpu之間的資料傳遞分三步驟:
1.首先利用內建的opengl函式生成乙個id號碼
2.根據需要對該id號碼進行記憶體型別的繫結,繫結完成後gpu中用於接收系統記憶體中資料的」識別符號」就準備好了,
3.對這部分記憶體進行初始化,初始化的內容來自於系統記憶體中,這一部分功能利用glbufferdata函式完成.資料由提交到gpu專用的記憶體中之後,需要根據應用場景對資料進行適應的分配,比如有的資料當做頂點,有的作為顏色,有的用於控制光照等等
此外,由於gpu具有高並行結構,所有gpu在處理圖形和複雜演算法方面計算效率較高.cpu大部分面積為控制器和暫存器,而gpu擁有更多的alu,邏輯運算單元用於資料處理,而非資料的快取記憶體和流控制.
[1] 幀緩衝(frame buffer):幀緩衝是下面幾種緩衝的合集。通過幀緩衝可以將你的場景渲染到乙個不同的幀緩衝中,可以使我們能夠在場景中建立鏡子這樣的效果,或者做出一些炫酷的特效,存放顯示用的資料的。
[2] 顏色緩衝(color buffer):儲存所有片段的顏色:即視覺輸出的效果。
[3] 深度緩衝(depth buffer):根據緩衝的z值,確定哪些麵片被遮擋。由glfw自動生成。
[4] 模板緩衝(stencil buffer):與深度測試類似,通過比較模板值和預設值,決定是否丟棄片段。
資料在opengl中處理順序是: 頂點著色器 - 片段著色器 - 模板測試 - 深度測試
1.什麼是深度?
所謂深度,就是在座標系中畫素z座標距離觀察者的距離.
opengl會有專門的一塊區域進行z值(每個畫素上的z值)的存放,就是深度快取.
2.深度緩衝區作用?
一般情況下,我們繪製圖形時,後面繪製的覆蓋前面的圖形,一般繪製的順序從後向前繪製.所以會產生乙個效能問題」遮蓋部分」,先繪製的會被覆蓋,而你觀察到的只有最上面的那個模組下面被掩蓋的繪製就沒有意義!
深度測試就出現來解決遮蓋問題
作用:開啟深度測試繪製的時候會檢查z值,同乙個區域靠近觀察者的進行繪製,其他被遮蓋的區域不予繪製,與繪製的順序無關.
3.如何使用深度快取區測試?
為什麼要測試,一旦開啟之後,就會先測試深度值繪製
glenable(gl_depth_test);
用上述**開啟深度測試預設情況下,z值小的情況下會被覆蓋
第一種方法:在第二次繪製相同z值時,稍微偏移一點點解決遮蓋問題
注意:必須要非常小心確保z值的間隙,否則就像冰箱貼著的冰箱貼一樣會懸浮起來的風險
第二種方法:取樣glpolygonoffset函式,使得可以調節片段的深度值,使得深度值偏移而不會產生懸浮重點內容
VNC配置,以及常見問題
兩天搭安全試驗的環境,在vmware上安裝了ubuntu 10.10 以前用過,最早用的好像是6系列吧 安裝好後想用遠端桌面控制,畢竟在vmware上看到的介面比較小,不太方便。在安裝上vnc,做了一些配置 vnc使用gnome seeion啟動 後,使用時出了兩個問題 1.從遠端使用vncview...
iOS UI基礎常見問題
1.當需要監聽事件或進行物件間的通訊的時候,選擇通知還是 共同點 利用通知和 都能完成物件之間的通訊 比如a物件告訴d物件發生了什麼事情,a物件傳遞資料給d物件 不同點 一對一關係 1個物件只能告訴另乙個物件發生了什麼事情 通知 多對多關係 1個物件能告訴n個物件發生了什麼事情,1個物件能得知n個物...
關於vue cli的安裝以及常見問題
有些朋友在安裝完node後輸入命令會看到以下報錯 出現這種情況大概率是沒有以管理員的身份執行cmd,以管理員身份執行即可 分享乙個win10系統獲得完美管理許可權的方法 在安裝好node 之後,就可以開始安裝vue cli了 輸入 npm install g vue cli 回車 也可以安裝好 映象...