什么是光柵化?

一、 什么是光柵化?

光柵化作用是將幾何數據變換后轉換為像素呈現在顯示設備上的一個過程。幾何數據轉換為像素,
本質是坐標變換、幾何離散化,如下:

其中包含了坐標變換和幾何離散化:

二、光柵化完成了什么

3D中,物體是3維的,擁有X, Y, Z三個坐標,并且擁有R, G, B三種顏色,alpha透明度,U, V貼圖坐標,N法線。
三維物體在二維屏幕上的顯示,大致分為以下幾步:

  1. 坐標變換(transform)
    將場景中的三維坐標轉換為二維坐標,這個請參考我的文章坐標系空間變換。
  2. 顏色計算(shade)
    計算每個頂點的顏色,通過UV貼圖的顏色,結合光照,透明度等,計算出模型每個頂點的具體顏色(R, G, B)。
  3. 光柵化(rasterization)
    假定屏幕分辨率為
    1920×1080,在二維屏幕渲染(光柵化)時,內存中frame buffer只保存著1920×1080個屏幕點的顏色,然后一個一個的畫到屏幕上。(它的實現方式是以一個1920×1080長的一維數組儲存每個頂點的RGB顏色,然后遍歷數組畫出來)
    什么X, Y, Z,什么alpha之類的frame buffer都沒有的,在frame buffer里只有3個值:R, G, B。
    X, Y, Z, alpha等等屬性要在另外的地方存儲。

    光柵化,就是計算出1920×1080這么長的RGB數組中,每一個RGB的值。

三、光柵化怎么完成的

我們計算出了3D模型每個頂點的顏色,這個是基于3維坐標的,頂點的三維坐標可以是小數
但在屏幕渲染時,屏幕是只有X,Y二維的,并且其像素點坐標都是整數。1920×1080的屏幕只有1920×1080=2073600個像素點。所以光柵化的連點描邊是一個近似過程。

? ? ? 目前主流的面片分割是三角形分割,所以大家在3DS MAX或者MAYA里看3D模型的網格,基本都是三角形網格,但也有以四邊形為最小分割的算法,這里不涉及,我們認為3D模型的面片單元都是三角形。而光柵化主要有以下幾步:

  1. 讀取模型的頂點,3個3個的讀,因為要畫三角形。
  2. 將3個頂點兩兩連成線,形成三角形。
  3. 計算屏幕像素點在三角形內還是三角形外。在三角形內部的,就上色(顏色是之前算出來的),在三角形外部的,就不上色。
    (注意:如果一個三角形擋在另一個三角形前面,我們應該只畫前面的三角形。所以這里還需要比較一下正準備上色的這個像素點是不是已經上過色了。如果這個像素點已經上過色了,并且它是被Z=1的頂點上的色,而我們正準備上色的這個頂點的Z=2(說明這個頂點被擋在了后面),那么這個頂點就不應該上色,因為它是被擋住的點。)
  4. 不斷的循環,直到畫完3D模型的所有三角形,這樣一個模型就出來了!

總結:

總的來說,像素和紋素實際上是點,不是實體的塊。屏幕空間原點是左上角的物理像素,但是紋理坐標原點是紋素矩形的最左上角。最重要的是,記住當你要將紋理中的紋素正確的映射到屏幕空間中的像素時,你需要減去0.5個單位。

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

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

相關文章

element-ui 實現輸入框下拉樹組件(2024-05-23)

用element-ui的 el-input&#xff0c;el-tree&#xff0c;el-popover組件組合封裝 import url("//unpkg.com/element-ui2.15.14/lib/theme-chalk/index.css"); <script src"//unpkg.com/vue2/dist/vue.js"></script> <script src"//…

棗莊高防服務器如何實現全球覆蓋?

利用 棗莊高防服務器如何實現全球覆蓋&#xff1f; 嗨&#xff0c;親愛的讀者們&#xff01;今天我們將帶你探索如何利用棗莊高防服務器實現全球覆蓋&#xff0c;讓你的網站在世界各地都能穩定快速地訪問。而我們這次推薦的服務器商是萊卡云&#xff08;Lcayun&#xff09;&am…

C數據結構:二叉樹

目錄 二叉樹的數據結構 前序遍歷 中序遍歷 后序遍歷 二叉樹的創建 二叉樹的銷毀 二叉樹的節點個數 二叉樹葉子節點個數 二叉樹第K層節點個數 二叉樹的查找 層序遍歷 判斷二叉樹是否為完全二叉樹 完整代碼 二叉樹的數據結構 typedef char BTDataType; typedef str…

使用numpy手寫一個神經網絡

本文主要包含以下內容&#xff1a; 推導神經網絡的誤差反向傳播過程使用numpy編寫簡單的神經網絡&#xff0c;并使用iris數據集和california_housing數據集分別進行分類和回歸任務&#xff0c;最終將訓練過程可視化。 1. BP算法的推導過程 1.1 導入 前向傳播和反向傳播的總體…

Three.js——相機

在Three.js中&#xff0c;相機&#xff08;Camera&#xff09;是用于定義視圖和渲染場景的一個關鍵組件。相機決定了你從哪個角度和位置觀察場景中的物體&#xff0c;以及如何呈現這些物體。Three.js 提供了幾種不同類型的相機&#xff0c;每種相機都有其特定的用途和特性。以下…

Unity OutLine 模型外描邊效果

效果展示&#xff1a; 下載鏈接

【Rust日報】ratatui版本更新

[new ver] ratatui v0.26.3 一個構建終端用戶界面的庫。新版本包括&#xff1a; 修復Unicode 截斷 bug對顏色更好地序列化更快的渲染棄用assert_buffer_eq宏暴露錯誤類型常量函數和類型 官網: https://ratatui.rs/ 鏈接: https://ratatui.rs/highlights/v0263/ [new lib] ansi2…

618電商選品爆款攻略,誰掌握誰爆單

618電商節是各大電商平臺和品牌商家的重要促銷節點&#xff0c;選品和營銷策略對于銷售成績至關重要。以下是一些選品和營銷攻略的要點&#xff1a; 一、市場分析與目標定位 1、分析當前經營類目市場的流行趨勢、熱門品類以及消費者需求的變化。 目前市場上商品繁多&#xf…

Java 命令執行某一個特定類

在Java中&#xff0c;要執行一個特定的類&#xff08;通常是包含main方法的類&#xff09;&#xff0c;你需要使用java命令&#xff0c;并指定類的完全限定名&#xff08;包括包名&#xff09;。通常&#xff0c;這還需要你設置正確的類路徑&#xff08;classpath&#xff09;&…

Apache Cassandra和Java:介紹如何在Java中連接和使用Apache Cassandra這款數據庫

1. Apache Cassandra簡介 Apache Cassandra是一個開源的分布式NoSQL數據庫系統,最初由Facebook開發,用來處理大量的結構化數據 across many commodity servers. Cassandra在高可用性和無單點故障的同時,提供了出色的數據分布策略。 Apache Cassandra的主要特點: 分布式…

超詳細避坑指南!OrangpiAIPro轉換部署模型全流程!

目錄 OrangepiPro初體驗 前述&#xff1a; 一、硬件準備 二、安裝CANN工具鏈&#xff08;虛擬機&#xff09; 三、配置模型轉換環境&#xff08;虛擬機&#xff09; 1.安裝miniconda 。 2.創建環境。 3.安裝依賴包 四、轉換模型 1. 查看設備號&#xff08;開發板&…

一步一腳印:輕松掌握服務器硬件的奧秘

在這個信息化飛速發展的時代&#xff0c;無論是企業還是個人&#xff0c;對數據處理和存儲的需求日益增長。服務器&#xff0c;作為互聯網的基石&#xff0c;其重要性不言而喻。但對于大多數人來說&#xff0c;服務器的內部世界似乎既復雜又遙遠。不過&#xff0c;不用擔心&…

在Anaconda中修改查找和安裝軟件包的存儲庫的來源channels

以下是一些關鍵的步驟和命令&#xff0c;用于修改Anaconda的channels&#xff1a; 查看當前channels 使用命令 conda config --show channels 可以查看當前配置的channels。 添加新的channel 使用命令 conda config --add channels <channel_url> 來添加一個新的channel…

TIM定時器PWM輸出

tim.c #include "tim.h" #include "stm32mp1xx_tim.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h"//tim4初始化(蜂鳴器) void tim4_init(){//1.使能GPIOB的外設時鐘RCC->MP_AHB4ENSETR | (0x1<<1);//使能TI…

辦公必備!一鍵拆分文件,效率翻倍的秘密

需求介紹 1、我有一張數據表“測試數據.xlsx” 2、我要根據A1“COUNTY_CODE”分類拆分成幾張數據表&#xff08;這里從9657到9658共12類&#xff0c;就是拆分成12張數據表&#xff09; 3、根據12個分類&#xff0c;發送數據郵件給對應的收件人 4、收件人及抄送人、共同抄送人…

Appium系列(2)元素定位工具appium-inspector

背景 如實現移動端自動化&#xff0c;依賴任何工具時&#xff0c;都需要針對于頁面中的元素進行識別&#xff0c;通過識別到指定的元素&#xff0c;對元素進行事件操作。 識別元素的工具為appium官網提供的appium-inspector。 appium-inspector下載地址 我這里是mac電腦需要下…

基于Cloudflare/CloudDNS/GitHub使用免費域名部署NewBing的AI服務

部署前準備&#xff1a; Cloudflare 賬號 https://dash.cloudflare.com/login CloudDNS 賬號 https://www.cloudns.net/ GitHub 賬號 https://github.com/Harry-zklcdc/go-proxy-bingai Cloudflare 部署 Worker CloudDNS 獲取免費二級域名 GitHub New Bing Ai 項目 https://git…

揭秘黃金分割數列:斐波那契數列的奇妙之旅

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、黃金分割數列——斐波那契數列的簡介 二、實現斐波那契數列的函數 三、斐波那契數列在…

前端開發之xlsx的使用和實例,并導出多個sheet

前端開發之xlsx的使用和實例 前言效果圖1、安裝2、在頁面中引用3、封裝工具類&#xff08;excel.js&#xff09;4、在vue中使用 前言 在實現業務功能中導出是必不可少的功能&#xff0c;接下來為大家演示在導出xlsx的時候的操作 效果圖 1、安裝 npm install xlsx -S npm inst…

Discuz!X3.4論壇網站公安備案號怎樣放到網站底部?

Discuz&#xff01;網站的工信部備案號都知道在后臺——全局——站點信息——網站備案信息代碼填寫&#xff0c;那公安備案號要添加在哪里呢&#xff1f;并沒有看到公安備案號填寫欄&#xff0c;今天馳網飛飛和你分享 1&#xff09;工信部備案號和公安備案號統一填寫到網站備案…