深度的相關(guān)含義
深度:顧名思義胆数,即三維圖形坐標(biāo)中,物體坐標(biāo)距離觀察者(攝像機點)的遠(yuǎn)近距離描述互墓,也就是3D坐標(biāo)中的z值必尼。
深度緩沖區(qū):實質(zhì)是一塊GPU緩存上的內(nèi)存區(qū)域,用于存儲每個像素點(顯示于屏幕的)的深度值轰豆,深度值越大胰伍,就離觀察者越遠(yuǎn)。
深度緩沖區(qū)存在的意義:如下圖酸休,Open GL若關(guān)閉深度測試骂租,在執(zhí)行位圖繪制操作時,先繪制了距離較近的綠色位圖斑司,又繪制了距離較遠(yuǎn)的紅色位圖渗饮,由于繪制順序的原因但汞,導(dǎo)致實際距離較遠(yuǎn)的紅色位圖顯示在了上面。有了深度緩沖區(qū)互站,繪制操作的順序不會影響到顯示的層級關(guān)系私蕾。只要存在深度緩沖區(qū),Open GL都會把像素的深度值寫入到深度緩沖區(qū)胡桃,除非調(diào)用glDepthMask(GL_FALSE)禁止寫入深度緩沖區(qū)踩叭。
深度測試:深度緩沖區(qū)(DepthBuffer)和顏?色緩存區(qū)(ColorBuffer)是對應(yīng)的。顏色緩存區(qū)存儲像素的顏?信息翠胰,而深度緩沖區(qū)存儲像素的深度信息. 在決定是否繪制?一個物體表?面時容贝,首先要將表面對應(yīng)的像素的深度值與當(dāng)前深度緩沖區(qū)中的值進(jìn)?比較。如果大于深度緩沖區(qū)中的值,則丟棄這部分之景,否則利?這個像素對應(yīng)的深度值和顏?色值斤富,分別更新深度緩沖區(qū)和顏色緩存區(qū). 這個過程稱為”深度測試”。
深度測試的使用
繪制場景前锻狗,先清除Open GL狀態(tài)機中的深度緩沖區(qū)與顏色緩沖區(qū)满力,防止之前的繪制場景影響當(dāng)前要繪制的場景
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
開啟深度測試
glEnable(GL_DEPTH_TEST);
清除深度緩沖區(qū),每個像素的默認(rèn)值為1.0轻纪,表示為深度最大值油额,深度值的范圍為0~1,值越小表示越靠近觀察者刻帚,值越大表示越遠(yuǎn)離觀察者
深度緩沖區(qū)的寫入開啟關(guān)閉
//GL_TRUE 表示開啟深度緩沖區(qū)寫入 ? ?
//GL_FALSE 表示關(guān)閉深度緩沖區(qū)寫入 ?
glDepthMask(GL_TRUE/GL_FALSE)
下面是未開啟深度測試的甜甜圈旋轉(zhuǎn)效果圖
開啟深度測試的甜甜圈旋轉(zhuǎn)效果圖