深度緩存
1. opengl中glreadpixels讀取深度緩存的值為啥都是零呀謝謝
WebGL1.0的文檔中對於readPixels方法有明確的說明:The data returned from readPixels must be up-to-date as of the most recently sent drawing command.
也就是說該方法必須在渲染完一幀的頁面之後立即調用才有效果,否則取不到值,比如這樣調用:
gl.viewport(0,0,World.canvas.width,World.canvas.height);
gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);
scene.draw(camera);
var a = new Uint8Array(4);
gl.readPixels(0,0,1,1,gl.RGBA,gl.UNSIGNED_BYTE,a);
console.log(a);
此處一幀的繪制(scene.draw(camera))完全完成之後再讀取就可以獲取准確值了,你自己可以試一下。
2. 深度緩存演算法的演算法描述
該演算法需要兩個緩存器,一個是用來存放顏色的顏色緩存器,另一個是用來存放深度的深度緩存器。利用深度緩存器,可以進行可見性的判斷,消除隱藏對象。其具體做法是:
首先對深度緩存器和顏色緩存器進行初始化,把深度緩存器中所有單元置成一個最大可能的深度值,把顏色緩存器中各單元置成背景顏色。然後將場景中的物體不分次序地投影到象平面上去。對於每個投影點(象素),把投影物體在該點處的深度與深度緩存器中相應位置上的深度值進行比較,如果前者小於後者,那麼就把當前被投影物體的顏色寫到顏色緩存器中去,同時用當前投影物體的深度去更新深度緩存器中相應象素的深度,否則不做任何操作。
3. 深度緩存演算法的介紹
深度緩存演算法(depth—buffer method)是一種常用的判定對象表面可見性的物空間演算法,它在投影面上的每一像素位置比較場景中所有面的深度。由於通常沿著觀察系統的z軸來計算各對象距觀察平面的深度,該演算法也稱為z緩存(z-buffer)演算法。
4. 深度緩存演算法包括哪些步驟
深度緩存(Z-buffer)演算法是一種典型的、簡單的圖象空間面消隱演算法。該演算法需要一個深度緩存數組 ZB,此外還 需要一個顏色屬性數組 CB ,它們的大小與屏幕上像素點的個數相同。 Z-buffer 演算法的步驟如下:
(1)初始化 ZB 和 CB,使得 ZB(i,j)=Zmax,CB(i,j)=背景色,i=1,…, m; j=1,…,n。
(2)對多邊形 P,計算它在點(i,j)處的深度值 zi,j。
(3)若 zi,j< ZB(i,j),則 ZB(i,j)=zi,j,CB(i,j)=多邊形 P 的顏色。
(4)對每個多邊形重復(2) 、 (3)兩步,最終在 CB 中存放的就是消隱後的圖形。 這個演算法的關鍵在第(2)步,要盡快判斷出哪些點落在一個多邊形內,並盡快求出一個點的深度值。這里需要應用 多邊形點與點之間的相關性,包括水平相關性和垂直相關性。
5. openGL裡面那個深度緩存是什麼東西啊.. 還有那個深度測試又是什麼呢
深度緩存中存儲著每個象素點(繪制在屏幕上的)的深度值! 深度測試決定了是否繪制較遠的象素點(或較近的象素點),通常選用較近的, 而較遠優先能實現透視的效果! 補充: 如同在真實的世界中,我們只能看見距離自己較近的東西,而較遠的東西會被較近的東西掩蓋,使我們無法看見! 追問: 如果我不啟用深度測試 被覆蓋的東西能被顯示出來么~?~? 回答: 不能,因為OpenGl本身為你開啟了較近優先的深度檢測,除非你自己開啟較遠優先的深度檢測,
6. directx深度緩存計算過程中深度值保存么
只記錄最接近,就是最小的一個值。如果新像素比他大,那麼忽略,如果比他小,那麼渲染到屏幕,並且更新深度緩存為自己的值(最小值)
7. 請問Direct3D中模板緩存 和深度緩存的檢測順序
深度緩存先檢測。
8. 下面關於深度緩存消隱演算法的論斷哪一條不正確
演算法(Algorithm)是指完成一個任務所需要的具體步驟和方法。也就是說給定初始狀態或輸入數據,能夠得出所要求或期望的終止狀態或輸出數據。
演算法常常含有重復的步驟和一些比較或邏輯判斷。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
憑我的直覺,選c好啦!