RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

OpenGL中的深度、深度緩存、深度測試

Dbwd_Imgtec ? 來源:未知 ? 作者:李倩 ? 2018-07-05 16:49 ? 次閱讀

1、深度

所謂深度,就是在openGL坐標系中,像素點Z坐標距離攝像機的距離。攝像機可能放在坐標系的任何位置,那么,就不能簡單的說Z數(shù)值越大或越小,就是越靠近攝像機。

2、深度緩沖區(qū)

深度緩沖區(qū)原理就是把一個距離觀察平面(近裁剪面)的深度值(或距離)與窗口中的每個像素相關聯(lián)。

首先,使用glClear(GL_DEPTH_BUFFER_BIT),把所有像素的深度值設置為最大值(一般是遠裁剪面)。

然后,在場景中以任意次序繪制所有物體。硬件或者軟件所執(zhí)行的圖形計算把每一個繪制表面轉(zhuǎn)換為窗口上一些像素的集合,此時并不考慮是否被其他物體遮擋。

其次,OpenGL會計算這些表面和觀察平面的距離。如果啟用了深度緩沖區(qū),在繪制每個像素之前,OpenGL會把它的深度值和已經(jīng)存儲在這個像素的深度值進行比較。新像素深度值<原先像素深度值,則新像素值會取代原先的;反之,新像素值被遮擋,他顏色值和深度將被丟棄。

為了啟動深度緩沖區(qū),必須先啟動它,即glEnable(GL_DEPTH_TEST)。每次繪制場景之前,需要先清除深度緩沖區(qū),即glClear(GL_DEPTH_BUFFER_BIT),然后以任意次序繪制場景中的物體。

數(shù)學基礎:

待渲染的照相機空間中的深度經(jīng)常定義為近距 near 到遠距 far 之間的 z 值,Z坐標和X、Y坐標一樣。在變換、裁減和透視除法后,Z的范圍為-1.0~1.0。DepthRange映射指定Z坐標的變換,這與用于將X和Y映射到窗口坐標的視口變換類似,在透視變換之后,得到新的 z' 值:

其中 z 是照相機空間的值,它有時候也表示為 w 或者 w'。

結(jié)果 z' 是在 -1 到 1 之間歸一化之后的值,其中近距 near 平面位于 -1 處,遠距 far 平面位于 1 處。在這個范圍之外的相應點在視圖體之外,不需要進行渲染。

為了實現(xiàn)深度緩沖,在整個屏幕空間上的對當前多邊形頂點之間進行插值來計算 z' 的值,通常這些中間數(shù)值在深度緩沖區(qū)中用定點數(shù)格式保存。距離近距 near 平面越近,z' 值越密;距離越遠,z' 值越稀。這樣距離照相機越近精度越高。near 平面距離照相機越近,則遠距離位置的精度越低。near 平面距離照相機太近是在遠距離物體產(chǎn)生人為誤差的一個常見因素。

3、深度測試

OpenGL中的深度測試是采用深度緩存器算法,消除場景中的不可見面。在默認情況下,深度緩存中深度值的范圍在0.0到1.0之間,這個范圍值可以通過函數(shù):glDepthRange (nearNormDepth, farNormalDepth);將深度值的范圍變?yōu)閚earNormDepth到farNormalDepth之間。這里nearNormDepth和farNormalDepth可以取0.0到1.0范圍內(nèi)的任意值,甚至可以讓nearNormDepth > farNormalDepth。這樣,通過glDepthRange函數(shù)可以在透視投影有限觀察空間中的任意區(qū)域進行深度測試。

另一個非常有用的函數(shù)是:glClearDepth (maxDepth);參數(shù)maxDepth可以是0.0到1.0范圍內(nèi)的任意值。glClearDepth用maxDepth對深度緩存進行初始化,而默認情況下,深度緩存用1.0進行初始化。由于在進行深度測試中,大于深度緩存初始值的多邊形都不會被繪制,因此glClearDepth函數(shù)可以用來加速深度測試處理。這里需要注意的是指定了深度緩存的初始化值之后,應調(diào)用: glClear(GL_DEPTH_BUFFER_BIT); 完成深度緩存的初始化。

在深度測試中,默認情況是將需要繪制的新像素的z值與深度緩沖區(qū)中對應位置的z值進行比較,如果比深度緩存中的值小,那么用新像素的顏色值更新幀緩存中對應像素的顏色值。這種比較測試的方式可以通過函數(shù):glDepthFunc(func);進行修改。其中參數(shù)func的值可以為GL_NEVER(沒有處理)、GL_ALWAYS(處理所有)、GL_LESS(小于)、GL_LEQUAL(小于等于)、GL_EQUAL(等于)、GL_GEQUAL(大于等于)、GL_GREATER(大于)或GL_NOTEQUAL(不等于),其中默認值是GL_LESS。這些測試可以在各種應用中減少深度緩存處理的的計算。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • OpenGL
    +關注

    關注

    1

    文章

    85

    瀏覽量

    29243
  • 緩存器
    +關注

    關注

    0

    文章

    63

    瀏覽量

    11658

原文標題:OpenGL中的深度、深度緩存、深度測試

文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    談談深度無盤緩存工具設置技巧

    。經(jīng)過本人這段時間一直在實際環(huán)境測試深度無盤服務端自帶的IO讀緩存深度無盤緩存工具,發(fā)現(xiàn)這兩
    發(fā)表于 07-15 13:24

    分享用深度無盤做的單包啟動的6種不同配置客戶機

    ,這個速度還是不錯的。經(jīng)過本人反復測試,發(fā)現(xiàn)集成到IO里面的讀緩存沒有深度緩存工具里面讀緩存效果好,深度
    發(fā)表于 07-15 14:39

    淺談示波器的存儲深度

    1MHz),這對于我們選擇示波器帶寬來說300MHz的示波器帶寬相對于幾百KHz的電源開關頻率來說已經(jīng)足夠,但很多時候我們卻忽略了對采樣率和存儲深度的選擇.比如說在常見的開關電源的測試,電壓開關的頻率一般
    發(fā)表于 05-07 10:46

    淺談示波器的存儲深度

    二進制波形信息存儲到示波器的高速CMOS內(nèi)存,就是示波器的存儲,這個過程是“寫過程”。內(nèi)存的容量(存儲深度)是很重要的。對于DSO,其最大存儲深度是一定的,但是在實際測試中所使用的存
    發(fā)表于 08-10 16:02

    FPGA的最大深度

    被用作系統(tǒng)的緩沖元件或隊列。因此FIFO的大小基本上暗示了所需緩存數(shù)據(jù)的容量,該容量取決于讀寫數(shù)據(jù)的速率。FIFO深度計算=B-B*F2/(F1*I), B為突發(fā)數(shù)據(jù)塊大小
    發(fā)表于 05-28 14:17

    Nanopi深度學習之路(1)深度學習框架分析

    學習,也就是現(xiàn)在最流行的深度學習領域,關注論壇的朋友應該看到了,開發(fā)板試用活動中有【NanoPi K1 Plus試用】的申請,介紹NanopiK1plus的高大上優(yōu)點之一就是“可運行深度學習算法的智能
    發(fā)表于 06-04 22:32

    深度學習的圖片如何增強

    深度學習的圖片增強
    發(fā)表于 05-28 07:03

    深度學習的IoU概念

    深度學習的IoU概念理解
    發(fā)表于 05-29 09:24

    深度學習DeepLearning實戰(zhàn)

    測試)三、主講內(nèi)容1:課程一、強化學習簡介課程二、強化學習基礎課程三、深度強化學習基礎課程四、多智能體深度強化學習課程五、多任務深度強化學習課程六、強化學習應用課程七、仿真實驗課程八、
    發(fā)表于 01-09 17:01

    深度學習在預測和健康管理的應用

    深度學習在預測和健康管理的應用綜述摘要深度學習對預測和健康管理(PHM)引起了濃厚的興趣,因為它具有強大的表示能力,自動化的功能學習能力以及解決復雜問題的一流性能。本文調(diào)查了使用深度
    發(fā)表于 07-12 06:46

    EDX與XPS測試時采樣深度的差別?

    XPS采樣深度為2-5nm,EDS采樣深度大約為1um,對于不同采樣深度有區(qū)別,金屬樣品采樣深度較淺。蘇試宜特實驗室提供解答
    發(fā)表于 09-30 18:36

    深度學習存在哪些問題?

    深度學習常用模型有哪些?深度學習常用軟件工具及平臺有哪些?深度學習存在哪些問題?
    發(fā)表于 10-14 08:20

    什么是深度學習?使用FPGA進行深度學習的好處?

    什么是深度學習為了解釋深度學習,有必要了解神經(jīng)網(wǎng)絡。神經(jīng)網(wǎng)絡是一種模擬人腦的神經(jīng)元和神經(jīng)網(wǎng)絡的計算模型。作為具體示例,讓我們考慮一個輸入圖像并識別圖像對象類別的示例。這個例子對應機器學習
    發(fā)表于 02-17 16:56

    渲染的幀緩存深度緩存

    渲染涉及大量的緩存,這里緩存只是一個簡單的存有像素數(shù)據(jù)的矩形內(nèi)存塊,最重要緩存是幀緩存深度緩存
    的頭像 發(fā)表于 05-14 11:44 ?6336次閱讀
    渲染<b class='flag-5'>中</b>的幀<b class='flag-5'>緩存</b>和<b class='flag-5'>深度</b><b class='flag-5'>緩存</b>

    如何通過MEC構(gòu)造基于深度學習的自動駕駛汽車緩存

    本文通過使用部署在多接入邊緣計算(MEC)結(jié)構(gòu)上的深度學習方法,為自動駕駛汽車提出了基于深度學習的緩存。通過仿真測試,結(jié)果發(fā)現(xiàn)該方法可以最大限度地減少延遲。
    的頭像 發(fā)表于 10-10 09:26 ?4530次閱讀
    RM新时代网站-首页