計算機圖形學理論(4):緩沖區

本系列根據國外一個圖形小哥的講解為本,整合互聯網的一些資料,結合自己的一些理解。

什么是緩沖區?

緩沖區是保存某些數據的臨時存儲空間。

為什么我們需要緩沖區?原因很簡單,當數據量很大時,因為計算機無法同時處理整個數據,因此在處理當前數據集時需要額外的空間來存儲其余數據。

在計算機圖形學中,緩沖區有多種定義方式。

  • 分辨率:寬度(n) x 高度(m)
  • 深度(或精度):k
  • 位數/像素

例如,如果我們想要每個像素使用 RGB 通道,則一個通道需要 8 位,總共 24 位(3 x 8 位)。
image.png

OpenGL 中的緩沖區

在openGL中,有顏色緩沖區、深度緩沖區、模板緩沖區等。

顏色緩沖區用于顯示:

  • 前后
  • 輔助(存儲處理中的圖像并對其應用一些操作)
  • 立體顯影(用于頭戴式顯示器。它們為眼睛的每一側都有兩個獨立的顯示。)

深度緩沖區用于遮擋。它只保存 z 值,即灰度表示。

模板緩沖區類似于使用蒙版進行繪畫。你把一個有孔的模具放在紙上,然后你在紙上噴漆,結果將是一張與孔所在位置相對應的黑色紙張。模板緩沖區為繪制區域存儲 1 位值,為其他區域存儲 0 位值。
image.png

寫入緩沖區

從概念上講,我們可以將所有內存視為一個大型的二維像素數組。我們讀取和寫入矩形像素塊,幀緩沖區是該內存的一部分。
寫入幀緩存
image.png

位寫入模式

source源和destination目標以按位方式組合,有 16 種可能。
image.png

緩沖區選擇

OpenGL 可以從任何緩沖區(前、后、深度)讀取。但要注意,幀緩沖區中像素的格式與處理器內存中的像素格式不同,而且這兩種類型的內存駐留在不同的地方————這會導致打包和拆包、讀取速度慢的問題。

我們使用“glReadPixels”函數讀取緩沖區。
image.png
例如,讀取圖像緩沖區將是:
image.png

緩沖區寫入的應用場景

混合與合成

將綠幕替換成自定義背景。
image.png

不透明度和透明度(alpha 混合)

不透明的表面不允許光線通過,透明表面允許所有光線通過。那么半透明呢?它將會通過“一些”光線。

我們可以將半透明度表示為“1-不透明度”或“1-alpha”。
背景在向左移動時不斷改變 Alpha 值。當它等于0時,物體最終變得透明。

寫入模型

我們使用 RGBA 顏色的分量來存儲不透明度。在渲染過程中,我們可以擴展我們的寫入模型以使用 RGBA 值。
源分量 * 源因子 + 目標分量 * 目標因子 混合生成

混合方程

讓我們為每個 RGBA 分量定義源和目標的混合因子。

  • source = [s_r, s_g, s_b, s_alpha]
  • destination = [d_r, d_g, d_b, d_alpha]

以下是源顏色和目標顏色:

  • source factor = [b_r, b_g, b_b, b_alpha]
  • destination factor = [c_r, c_g, c_b, c_alpha]

混合為
c = source*source_factor target*destinaion_factor ,其中 c 將是新的目標因子。
Alpha混合

渲染順序依賴

當我們渲染一個對象時,以正確的順序渲染非常重要。

因為多邊形是按照沿著管道傳遞的順序渲染的,所以我們需要首先從相機渲染進一步的多邊形以獲得正確的遮擋效果(稍后更接近的面)。
A在B上 ≠ B在A上
讓我們考慮一下一個物體同時具有不透明和半透明表面的情況。

  • 不透明的面阻擋其后面的所有多邊形,它會影響深度緩沖區。
  • 半透明面不應影響深度緩沖區。

為了正確渲染這個對象,我們需要首先對多邊形進行排序以消除順序依賴性。

組合圖像

我們有時候會在視頻中看到淡入淡出(crossfade)的效果,以使場景順利過渡到下一個場景。我們也可以在這里使用 alpha 混合! Crossfade的過程相當于線性插值。
t 是介于 0 和 1 之間的權重
當t為0.6時,
image.png
然而,在許多情況下,加法不足以混合圖像,在電影制作中,他們需要額外的技術:

  • 前景和背景分開拍攝。
  • 當他們拍攝前景時,他們會用 Choramkey 背景來拍攝。

我們如何以數字方式做到這一點?

二值圖像掩模

與模板緩沖區一樣,使用掩模,我們可以將前景與背景分開。
image.png
但是我們可以在這里能看到一些鋸齒。

解決此問題的一種方法是根據前景和背景之間的邊界插入顏色。
image.png
對于邊界上的每個像素,我們可以確定前景與背景的面積比。

另一種方法稱為“alpha合成”,它存儲覆蓋的像素部分(稱為 alpha)。
image.png

另一個混合的例子

霧效果

我們也可以使用混合功能來模擬霧效果!

  • C`:新的目標因子
  • f : 霧因子
  • Cs :源顏色
  • (1-f):目標因子
  • Cf : 霧顏色

混合等式:C` = f * Cs + (1-f) Cf

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451970.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451970.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451970.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決:Every derived table must have its own alias

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 報錯: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Every derived table must have its own alias 解決&…

網絡爬蟲--20.【Scrapy-Redis實戰】分布式爬蟲獲取房天下--代碼實現

文章目錄一. 案例介紹二.創建項目三. settings.py配置四. 詳細代碼五. 部署1. windows環境下生成requirements.txt文件2. xshell連接ubuntu服務器并安裝依賴環境3. 修改部分代碼4. 上傳代碼至服務器并運行一. 案例介紹 爬取房天下(https://www1.fang.com/&#xff…

同一臺電腦安裝python2python3

【安裝之前,先了解一下概念】 python是什么? Python是一種面向對象的解釋型計算機程序設計語言,由荷蘭人Guido van Rossum于1989年發明,第一個公開發行版發行于1991年。 Python是純粹的自由軟件, 源代碼和解釋器CPytho…

程序員的常見健康問題

其實這些問題不僅見于程序員,其他長期經常坐在電腦前的職場人士(比如:網絡編輯、站長等),都會有其中的某些健康問題。希望從事這些行業的朋友,對自己的健康問題,予以重視。以下是全文。 我最近…

Java中BufferedReader和InputStreamReader

BufferedReader 類BufferedReader 由Reader類擴展而來,提供通用的緩沖方式文本讀取,而且提供了很實用的readLine,讀取一個文本行,從字符輸入流中讀取文本,緩沖各個字符,從而提供字符、數組和行的高效讀取。…

網絡爬蟲--21.Scrapy知識點總結

文章目錄一. Scrapy簡介二. Scrapy架構圖三. Scrapy框架模塊功能四. 安裝和文檔五. 創建項目六. 創建爬蟲一. Scrapy簡介 二. Scrapy架構圖 三. Scrapy框架模塊功能 四. 安裝和文檔 中文文檔:https://scrapy-chs.readthedocs.io/zh_CN/latest/intro/tutorial.html …

Spring 定時任務的幾種實現

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 近日項目開發中需要執行一些定時任務,比如需要在每天凌晨時候,分析一次前一天的日志信息,借此機會整…

trie樹(字典樹)

trie樹學習 學習trie樹 轉載于:https://www.cnblogs.com/cjoierljl/p/9317023.html

Vue 教程第四篇—— Vue 實例化時基本屬性

實例元素 el 實例元素指的是 Vue 實例化時編譯的容器元素&#xff0c;或者說是 Vue 作用的元素容器 <div id"app"></div> var vm new Vue({el: #app}) 也可以為實例元素指定其它選擇器 <div class"app"></div> var vm new Vue({…

Ubuntu將在明年推出平板及手機系統

4月26日下午消息&#xff0c;知名Linux廠商Canonical今天正式發布Ubuntu 12.04版開源操作系統。Ubuntu中國首席代表于立強透露&#xff0c;針對平板電腦的Ubuntu操作系統將在明年推出。 Ubuntu 12.04版開源操作系統發布 Ubuntu操作系統是一款開源操作系統&#xff0c;主要與OE…

scrapy框架異常--no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates)

解決方法&#xff1a; https://blog.csdn.net/qq_40176258/article/details/86527568 https://blog.csdn.net/weixin_39946931/article/details/88390797 謝謝博主分享&#xff01;

【BZOJ3590】[Snoi2013]Quare 狀壓DP

題解&#xff1a; 一道比較水的題 但這個測試數據極弱我也不知道我的代碼正確性是不是有保證 構成一個邊雙聯通 可以由兩個有一個公共點的邊雙聯通或者一個邊雙加一條鏈構成 所以我們需要要預處理出所有環 令f[i][j][k]表示起點為i&#xff0c;終點為j&#xff0c;經過點的狀態…

java swing簡介

UI 組件簡介 在開始學習 Swing 之前&#xff0c;必須回答針對真正初學者的一個問題&#xff1a;什么是 UI&#xff1f;初學者的答案是“用戶界面”。但是因為本教程的目標是要保證您不再只是個初學者&#xff0c;所以我們需要比這個定義更高級的定義。 所以&#xff0c;我再次…

定時任務 cron 表達式詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 &#xff08;Spring定時任務的幾種實現&#xff1a;見博客另一頁&#xff1a;http://blog.csdn.net/jiangyu1013/article/details/54405…

Android Studio 超級簡單的打包生成apk

為什么要打包&#xff1a; apk文件就是一個包&#xff0c;打包就是要生成apk文件&#xff0c;有了apk別人才能安裝使用。打包分debug版和release包&#xff0c;通常所說的打包指生成release版的apk&#xff0c;release版的apk會比debug版的小&#xff0c;release版的還會進行混…

推薦16款最棒的Visual Studio插件

Visual Studio是微軟公司推出的開發環境&#xff0c;Visual Studio可以用來創建Windows平臺下的Windows應用程序和網絡應用程序&#xff0c;也可以用來創建網絡服務、智能設備應用程序和Office插件。 本文介紹16款最棒的Visual Studio擴展&#xff1a; 1. DevColor Extension…

網絡爬蟲--22.【CrawlSpider實戰】實現微信小程序社區爬蟲

文章目錄一. CrawlSpider二. CrawlSpider案例1. 目錄結構2. wxapp_spider.py3. items.py4. pipelines.py5. settings.py6. start.py三. 重點總結一. CrawlSpider 現實情況下&#xff0c;我們需要對滿足某個特定條件的url進行爬取&#xff0c;這時候就可以通過CrawlSpider完成。…

可以生成自動文檔的注釋

使用/**和*/可以用來自動的生成文檔。 這種注釋以/**開頭&#xff0c;以*/結尾

怎么安裝Scrapy框架以及安裝時出現的一系列錯誤(win7 64位 python3 pycharm)

因為要學習爬蟲&#xff0c;就打算安裝Scrapy框架&#xff0c;以下是我安裝該模塊的步驟&#xff0c;適合于剛入門的小白&#xff1a; 一、打開pycharm&#xff0c;依次點擊File---->setting---->Project----->Project Interpreter&#xff0c;打開后&#xff0c;可以…