心懷希望の光柵化

還記得什么是光柵化咩?

0191ae539b9949539e973442a92e195f.png

將三維空間的幾何形體顯現在屏幕上,這就是光柵化(游戲、實時圖形學的應用)

Perspective Projection

在正交投影里如何定義三維空間中的立方體呢?

用x軸的覆蓋(左、右),y軸的覆蓋(上、下),z軸的覆蓋(遠、近)

遠近用正交投影和透視投影都是一樣的,在做透視投影的時候,是需要把視錐變成長方體

那我們如何定義這樣一個視錐呢?

382fd5d273ab4ff186d25678b77533f4.png

從攝像機出發,看向某一個區域,看到的近平面為其定義寬度和高度,就像是看顯示器一樣,定義一個寬高比,那什么是寬高比呢?

寬高比,顧名思義,它的寬度除以它的高度,即視圖區域可看到的長寬比

我們還需要一個定義:視角(可看到的角度的范圍,垂直可視角度,廣角就是指垂直可視角度較大)

由長寬比和垂直可視角度可以推出水平可視角度

把攝像機擺放到某各個位置,向一個方向看,如果從側面看可以看到這樣的三角形,右面的線和攝像機距離是eq?%7Cn%7C,我們已知垂直可視角度,可視角度是上下兩條連線的夾角,垂直可視角度/2是三角形張開的角度,可得出兩個公式:

93795aae9713453a93aedab131ba280a.png

定義視錐:定義垂直可視角度、定義寬高比?

可以自動轉化到定義正交投影的遠近、左右、上下

根據前置內容,所有東西都可以轉化到這樣一個立方體上:

a1e003bea3e24c03b3ae6614fd6a3379.png

我們如何將這個立方體畫到屏幕上呢?

既然要畫到屏幕上那就先明確屏幕的定義,在計算機圖形學中,屏幕被定義成一個二維的數組,數組中的每一個元素被定義成一個像素,像素的多少可以組成分辨率的概念

屏幕是典型的光柵成像設備,光柵即屏幕,把東西畫在屏幕上就是光柵化的過程

像素:picture element(居然真的是像素。。。),像素是最小的單位,在里面不會有變化

3f102198f6dd4ec28a1358228482b82e.png

透視投影轉化成正交投影需要保證近和遠兩個平面是不變的,大小是近遠兩平面都會變得和近平面一樣大

Canonical Cube to Screen

52d837d608d94babb54e23dbc45ef433.png

?定義像素坐標,均寫成eq?%28x%2Cy%29形式,用整數坐標描述,比如現在的藍色像素可以用eq?%282%2C1%29表示(從0開始數),屏幕的分辨率從eq?%280%2C0%29開始一直到eq?%28width-1%2Cheight-1%29,像素的中心是eq?%282.5%2C1.5%29,從三維空間到屏幕變換(立方體映射到屏幕空間):

233b67ff105a442095176cc99103e82a.png

有z怎么辦呢??

z先不用管,后面有它的用途,至于x和y,將這個拉成寬度是width,高度是height,因為-1~1是2,所以需要先/2再×對應的高度或者寬度,我們要把屏幕空間的左下角定義到原點上,也就是說原來的中心是eq?%280%2C0%29那需要把它移到該在的位置上,這個變換被稱為視口變換

69e37229eb6b406c8af6b3967e0b7f2c.png

?下一步我們要把空間中描述的信息變成真正的圖,即打散成像素

77341f6395a0463bba56f0e8970739b8.png

?在《少年派的奇幻漂流》中的老虎栩栩如生,這是圖形學的貢獻,老虎身上有很多多邊形,經歷了變換操作后會形成在屏幕中的多邊形,要進一步把多邊形打碎成像素顯示在屏幕上,知曉每一個像素的值都是什么,這個過程叫做光柵化

圖像不止可以顯現到屏幕上,還有一些其他的繪畫工具

Drawing Machine

機器人的機械臂?:

激光切割:

Different Raster Displays

示波器:示波器本身也是成像的設備,它成像的原理和早期的顯示器基本相同,電子經過陰極射線管加速打到屏幕上(CRT屏幕)

采用掃描的方式控制打印的位置,(隔行掃描,畫每張圖工作量減少一半,但對高速運動的畫面容易造成畫面撕裂)隔一行一條線,當足夠密集的時候就足以覆蓋整個屏幕:

?

顯示器🖥通過顯卡(內存中的一塊區域映射到屏幕上):

高分辨率顯示器,有些甚至分辨率超過了人的視網膜的分辨率(視網膜屏幕):

LCD(液晶顯示器)利用液晶的原理控制顯示

液晶通過自己的排布影響光的偏振方向(極化),兩個光柵不同方向排布

LED發光二極管:

墨水屏刷新有點慢,但是挺自然

三角形表示能力很強,可以表示很多二維三維中的圖形:

?

為什么三角形在圖形學中得到了如此廣泛的應用呢??

?

首先三角形很簡單,任何東西多可以拆分成三角形,內部一定是平面的,內外很清晰,只要定義了三角形的三個頂點,可以明確的知道差值:

判斷像素和三角形的位置關系是光柵化中很重要的一環,像素內部是不能有顏色變化的,那蓋住一半的像素該怎么辦?

那就考慮像素中心點與三角形的位置關系唄:

?

?

?

最簡單的光柵化方法:采樣,那么我們如何進行這樣的采樣呢?

可以這樣遍歷一個二維數組:

?inside是定義的一個函數,判斷點是否在三角形內(可以做叉積):

?那如果給定點恰好在三角形的邊界怎么辦?

那就要么不做處理,要么特殊處理(計上不計下,計左不計右)

通過采樣進行光柵化:

有的點不可能觸碰到三角形,三角形根本不可能填充到這些像素上,藍色區域:三角形的包圍盒

每一行都找最左和最右(包圍盒較大時比較適用):

實際屏幕效果:

?

綠色像素多一點(人眼對綠色更為敏感,紅:藍:綠=1:1:2)?

我們仍然認為像素是一個內部顏色均勻的小方塊:

?

采樣后對應像素發現不太對:

可是我們想要的不是這個嗎?

這鋸齒太明顯了吧?造成這個的結果呢就是因為鋸齒,鋸齒是圖形學中致力解決的一個問題,采樣率對于信號來說不夠高:走樣

抗鋸齒、反走樣是圖形學中的一個重要技術

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

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

相關文章

【UML用戶指南】-02-UML基本元素的介紹(二)

目錄 1、語法和語義規則 2、UML中的公共機制 (1)規約 (2)修飾 (3)通用劃分 (4)擴展機制 衍型/版型/類型(stereotype) 標記值 (tagged val…

Java編程常見問題匯總四

系列文章目錄 文章目錄 系列文章目錄前言一、忽略所有異常二、重復包裝RuntimeException三、不正確的傳播異常四、用日志記錄異常五、異常處理不徹底 前言 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。…

[C/C++]_[初級]_[在Windows和macOS平臺上導出動態庫的一些思考]

場景 最近看了《COM本質論》里關于如何設計基于抽象基類作為二進制接口,把編譯器和鏈接器的實現隱藏在這個二進制接口中,從而使用該DLL時不需要重新編譯。在編譯出C接口時,發現接口名直接是函數名,比如BindNativePort,怎么不是_BindNativePort?說明 VC++導出的函數默認是使…

專轉本英語應該怎么學?

來吧,寶子們,學姐給你們分享專轉本英語如何備考的方法了,單詞+語法,兩不耽誤,快拿著你們的小手來截圖記筆記啦~ 1、基礎差直接背單詞 對于基礎差的人呢,本身我們對英語這個科目就不感…

Google Earth Engine精度評價方法

今天講講如何在GEE中做最后的精度評價。主要是因為在和許多讀者或通過交流群,或通過私聊溝通過程中,發現很多人還不是很理解在GEE中分類后精度評價的問題。 在進行評價之前,需要明晰在GEE中精度評價分為哪幾種情況。我們這里說的是兩種情況。…

收藏品NFT的開發流程

開發收藏品NFT的流程涉及多個階段,從概念化和設計到技術實現和市場推廣。以下是詳細的開發步驟,通過這些步驟,可以成功開發和發布收藏品NFT項目,吸引用戶和投資者,并確保項目的持續運營和成功。北京木奇移動技術有限公…

Fiddler入門(接口抓包及APP測試)

目錄 一、Fiddler基礎介紹 二、Fiddler的作用 三、Fiddler安裝 四、Fiddler界面功能介紹 1、界面介紹 1)、菜單欄介紹 2)、工具欄介紹 3)、會話欄介紹 五、Fiddler抓取https數據 (面試題) 六、Fiddler…

C++ lambda表達式的作用和代碼示例

Lambda 表達式是 C11 引入的一種匿名函數語法,它可以方便地創建臨時函數對象,用于在函數調用時作為參數傳遞或者作為局部函數使用。Lambda 表達式可以捕獲外部變量,并具有與普通函數相似的語法結構。 主要作用如下: 簡化代碼&am…

【刷題(17)】技巧

一 技巧基礎 二 136. 只出現一次的數字 1 題目 2 解題思路 哈希表map 其實看到題目數組中某個元素出現的次數也可以直接用unordered_map容器統計每一個元素出現的次數,然后在遍歷整個map容器查看是否有元素出現的次數等于1 3 code class Solution { public:in…

商城項目【尚品匯】07分布式鎖-2 Redisson篇

1 Redisson功能介紹 基于自定義setnx實現的分布式鎖存在下面的問題: 重入問題:重入問題是指 獲得鎖的線程可以再次進入到相同的鎖的代碼塊中,可重入鎖的意義在于防止死鎖,比如HashTable這樣的代碼中,他的方法都是使用…

LightGBM 進行回歸建模的流程

LightGBM 進行回歸建模的流程 文章最前: 我是Octopus,這個名字來源于我的中文名–章魚;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github ;這博客是記錄我學習的點點滴滴,如果您對 Python、Java、AI、算法有…

將HTML頁面中的table表格元素轉換為矩形,計算出每個單元格的寬高以及左上角坐標點,輸出為json數據

export function huoQuTableElement() {const tableData []; // 存儲表格數據的數組let res [];// 獲取到包含表格的foreignObject元素const foreignObject document.getElementById(mydctable);if (!foreignObject){return ;}// 獲取到表格元素let oldTable foreignObject…

Nativefier : 將網址打包成exe桌面程序

1、需求場景 在日常開發中,需要針對一些網頁在一體機上使用,同時在瀏覽器上也可以使用,這里推薦大家用nativefier,對網址進行打包。以下是nativefier安裝命令: npm install nativefier -g 2、使用方法 --arch 系統 …

《混凝土壩監測儀器系列型譜》修訂中監測儀器分類方案解讀

隨著科技的不斷進步和監測需求的日益增加,對監測儀器分類方案進行修訂已成為必然的趨勢。本文旨在探討《混凝土壩監測儀器系列型譜》中對現有儀器分類方式的修訂,以及監測儀器選用的相關內容。希望對大家中有所幫助: 一、取消過時條目&#x…

服務器是一種高性能計算機

服務器是一種高性能計算機,專門設計用于在網絡中提供各種服務。它們通常具備比普通計算機更快的CPU運算能力、更可靠的運行性能、更大的I/O外部數據吞吐能力以及更好的擴展性。

java中方法引用

目錄 方法引用: 引用靜態方法 引用成員方法 引用構造方法 使用類名引用成員方法 引用數組的構造方法 練習 方法引用: 把已經有的方法拿過來用,當做函數式接口中抽象方法的方法體 在Java中,方法引用是一種簡化Lambda表達式的…

詳解Spring支持的幾種注入方式

在 Spring 框架中,Bean 的注入方式主要有以下幾種,其中一些是自動注入的。以下是詳細說明: 1. 構造函數注入 (Constructor Injection) 自動注入:使用 Autowired 注解時,Spring 容器會自動調用帶有 Autowired 注解的構…

教務管理系統-學員辦理體系介紹

隨著時代的快速開展,教育方面也沒落下,不僅是線下線上都呈現許多訓練校園,辦理軟件也順勢而為的呈現廣闊訓練校園面前,許多的校園和訓練組織也都在運用教務管理系統了。運用教務管理系統里邊的學員辦理體系可以讓相應的辦理人員更…

Redis的一致性

一、產生的原因 使用緩存,在進行寫操作的時候就會出現不一致的問題。 一致性分為三類:強一致性,弱一致性,最終一致性 二、方案 2.1 延時雙刪 在更新數據庫的操作前后分別進行一次刪除緩存的操作,并在更新數據庫之后…

《HelloGitHub》第 98 期

興趣是最好的老師,HelloGitHub 讓你對編程感興趣! 簡介 HelloGitHub 分享 GitHub 上有趣、入門級的開源項目。 github.com/521xueweihan/HelloGitHub 這里有實戰項目、入門教程、黑科技、開源書籍、大廠開源項目等,涵蓋多種編程語言 Python、…