3dwoo大學簡體電腦書店
從“1”開始3D編程
( 簡體 字)
作者:徐星類別:1. -> 程式設計 -> 綜合
出版社:清華大學出版社從“1”開始3D編程 3dWoo書號: 53310
詢問書籍請說出此書號!
有庫存
NT售價: 250
出版日:7/1/2020
頁數:216
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 字 )
ISBN:9787302548041 加入購物車加到我的最愛 (請先登入會員)
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社)
第1章3D程序分析方法
1.1輸入頂點數據
1.1.1描述頂點
1.1.2傳遞頂點
1.1.3綁定頂點緩沖區
1.2輸入MVP數據
1.3輸入紋理
1.3.1創建并傳遞紋理
1.3.2綁定紋理
1.4輸出幀緩沖
1.5數據處理過程
1.6TensorFlowJS的輸入輸出
1.7Vulkan的輸入輸出
1.8GL和Vulkan的線程模型
1.9源碼下載和編譯
小結
第2章3D圖形學基礎
2.1符號和約定
2.2向量的基本運算
2.3齊次坐標
2.3.14×4齊次矩陣
2.3.2平行線相交
2.4頂點、三角形、片元
2.5光柵化原語
2.6視景體
2.7光照模型
小結
第3章透視投影
3.1左右手坐標系
3.23D坐標和坐標系
3.33D流水線
3.4小孔成像
3.5模型變換和世界變換的意義
3.6透視投影的幾何模型
3.6.1眼睛坐標到投影坐標
3.6.2投影坐標到NDC坐標——xy分量
3.6.3眼睛坐標到NDC坐標——xy分量
3.6.4眼睛坐標到NDC坐標——z分量
3.6.5裁剪
3.6.6透視投影的幾何模型
3.6.7幾何模型的算法分析
3.7透視投影的透視除法模型
3.7.1眼睛坐標到裁剪坐標——xy分量
3.7.2眼睛坐標到NDC坐標——zw分量
3.7.3透視除法
3.7.4裁剪
3.7.5FOV表示透視投影矩陣
3.7.6真實深度
小結
第4章視圖變換和眼睛坐標系
4.1平移
4.2旋轉
4.3視圖變換矩陣
4.4示例
小結
第5章正交投影
5.1坐標系和坐標變換
5.2正交投影變換
小結
第6章視口變換
6.1NDC到窗口的變換
6.2NDC到[0,1]的變換
小結
第7章3D頂點——3D世界的1
7.1眼睛坐標
7.2正交投影
7.3透視投影
小結
第8章紋理坐標
8.1像素和多重采樣
8.2三角形插值
8.2.1最近距離法
8.2.2加權距離法
8.2.3重心坐標法
8.3紋理映射和紋理坐標
8.3.1環繞模式
8.3.2非全窗口輸出
8.3.3全窗口輸出:NDC頂點坐標1,uv小于1
8.3.4全窗口輸出:NDC頂點坐標1,uv大于1
8.3.5非歸一化的紋理坐標
8.4點原語及其紋理坐標
8.5網格和紋理映射
8.5.1Blender介紹
8.5.2平面紋理映射
8.5.3球體紋理映射
小結
第9章VR枕形畸變
9.1理想薄凸透鏡的放大率
9.2厚凸透鏡的畸變
9.2.1厚凸透鏡的基點和焦距公式
9.2.2厚凸透鏡的畸變
9.2.3厚凸透鏡放大率的泰勒級數
9.3畸變校正
9.3.1像差畸變校正
9.3.2像比例畸變校正
小結
第10章一種特殊的全窗口顯示的方法
10.1三個頂點實現全窗口顯示
10.20頂點實現全窗口顯示
小結
第11章光線追蹤
11.1正向追蹤和逆向追蹤
11.2光線追蹤過程
11.3射線生成
11.4FOV、像的大小、占屏比
11.5光線追蹤實現遠小近大
11.6光線追蹤平面
11.6.1射線和平面的關系
11.6.2射線和平面相交的實現
11.6.3Skybox
11.7光線追蹤三角形
11.7.1射線和三角形的相交
11.7.2光線追蹤三角形實現
11.8光線追蹤球
11.8.1射線和球的相交
11.8.2光照計算
11.8.3光線追蹤的1
11.9光線追蹤的陰影實現
11.10光線追蹤和光柵化對比
11.11示例
小結
第12章透視投影的其他應用
12.1雙攝像頭立體成像
12.2延遲渲染
12.2.1深度測試剔除所有被遮擋的點
12.2.2示例
12.3陰影
12.3.1生成最近深度紋理
12.3.2使用深度紋理
12.3.3示例
小結
第13章Skia
13.1Skia基礎
13.1.1常用接口
13.1.2Skia矩陣
13.1.3測試方法
13.2Skia物體坐標和世界坐標
13.2.1物體坐標
13.2.2模型變換
13.3Skia紋理坐標
13.3.1頂點坐標不包含模型變換
13.3.2頂點坐標包含模型變換
13.4Skia正交投影
13.4.1正交投影
13.4.2窗口映射
13.4.3窗口映射對原點的影響
13.5Skia圖像邊緣檢測
13.5.1Sobel算子
13.5.2實現邊緣檢測
小結
第14章一種通用的GPU多進程、多線程框架
14.1資源
14.2紋理Mailbox擴展
14.3同步Sync標記擴展
14.4資源的生命周期
14.4.1顯示客戶端生產資源
14.4.2顯示客戶端到顯示合成器的IPC
14.4.3顯示合成器使用資源
14.4.4刪除資源
小結
參考文獻
本書推導解釋了3D世界的1的具體含義,包括3D編程最常使用的5個坐標1的意義。對于透視投影的3D坐標1,推導了用戶使用的透視投影變換。原創性地提出了一個透視投影的一般模型。基于這個一般模型做了一些數學算法上的改進,得到了基于透視除法的透視投影。此外,也分析了模型視圖變換,窗口變換,紋理映射等對3D世界的1的影響。對于正交投影,則分析了基于正交投影的Skia的頂點坐標,紋理坐標特點,一些高級的3D編程概念如光線追蹤,延遲渲染,陰影紋理等。
本書源起于十年前作者從事Android圖形編程時,對3D圖形系統單位1的思考。2010年,是各大手機品牌和手機設計廠商熱火朝天地定制Android界面的一年。在這股界面定制浪潮中,出現了很多3D桌面。當時作者所在的團隊負責優化一個開源的3D桌面。這個3D桌面是一個六棱柱,棱柱的每個側面都貼上了應用程序的圖標。為了優化這個3D桌面,我們短暫地學習了OpenGL接口,也學會了編寫3D的“Hello World”程序,但是在計算六棱柱坐標的時候碰到了問題。利用幾何知識計算六棱柱坐標很簡單,但是在應用了透視投影、模型視圖變換、視口變換之后,我們不知道3D桌面里的六棱柱坐標是怎么計算出來的。具體到3D圖形編程,六棱柱的計算問題可以描述為: ①3D程序里面,用戶輸入的頂點紋理坐標的單位1是什么,是窗口上的一個像素嗎?或者說,如何定義頂點坐標和各種變換,將3D場景輸出到整個窗口?②透視投影使用的視景體和投影矩陣是怎么得到的?3D編程接口的書籍里面并不容易找到這個問題的答案。
直到幾年后,作者開始研究學習Chromium圖形系統,重新思考總結這個問題,才意識到,學習3D編程和學習一門編程語言是有區別的。
在學習一門新的語言,例如C/C++或者其他語言的時候,一般都能很快地去編寫一個“Hello World”程序,甚至實現一些更加復雜的功能。而對于3D編程,作者的感受是,看了圖形學的書,學習了OpenGL/Vulkan編程接口,但是真正實戰編程的時候,卻發現不會寫,也很難理解他人源碼的設計邏輯。學習3D編程和學習一門編程語言的區別在于,3D編程的難點不是接口和語言本身,而是理解3D編程背后的幾何數學原理。只有理解頂點紋理坐標1的含義、理解3D圖形編程背后的幾何數學原理,才能夠真正去設計3D程序。
本書圍繞主流開源項目里面涉及的3D頂點紋理1的含義、圖形編程的幾何數學原理展開內容。本書的“從1開始”具有以下三重含義。
 本書主要內容是針對透視投影、正交投影、光線追蹤等不同應用場景里面頂點紋理1和屏幕窗口上單位1之間的關系展開的。
 大多數的編程模型,主要是為了解決三類問題: 應用的問題、數學的問題,以及應用和數學的問題。對于所有的數學問題而言,數學是根本,是1。3D編程接口就是為了解決應用和數學的問題而實現的一個編程模型,數學是這個問題里面的1。
 如果從0開始學習3D編程是掌握3D編程接口,例如OpenGL/Vulkan,那么理解投影尤其是透視投影就是1。無論精通3D編程的哪種接口,如果不理解投影,就難以深入理解3D程序設計。
且慢,幾何數學原理?霍金的一位朋友說過,書(指的是《時間簡史》)里面每多一個公式,就會嚇跑一半的讀者。對于一個通俗讀物(通俗沒有貶低的意思,作者的意思是,《時間簡史》的讀者主要不是從事理論物理研究的科學家,而是我們這些對浩渺宇宙充滿好奇的普通大眾),霍金的朋友對于公式的看法無疑是正確的。
似乎是從霍金開始,各種不需要數學基礎的編程教程開始流行,例如零數學基礎學習機器學習等。如果你只是一個管理人員,或者僅僅是好奇,零數學的書籍無疑非常適合閱讀。但是,對于一個從事專業工作的軟件工程師而言,通過零數學學習到的知識,對于在軟件項目中解決問題幫助不大。所以對于3D圖形編程而言,數學是一個非常重要的工具,想要真正去設計一個3D程序,無法繞開3D相關的數學知識。目前中美貿易激戰正酣,美國想要在芯片和軟件系統領域擠壓國內企業的生存空間。大國之間的博弈,本質上是數學等基礎科學的博弈。華為任正非說過,芯片(軟件也如此)等需要“數學家、物理學家、化學家”。作者深以為然,理解一切事物的本質,離不開這些基礎科學。
不過,讀者也不需要擔心。本書用到的數學知識,都來自開源項目的源代碼,是圍繞著理解和解決3D工程實踐上的具體問題展開的,而不是針對“數學家”的。這些數學知識,都可以用源代碼進行測試驗證,所以主要是高中的立體幾何知識和一些大學低年級的矩陣運算知識。矩陣運算主要是矩陣的乘法。此外,在介紹虛擬現實的透鏡的畸變問題時,用到了泰勒級數。在介紹Skia邊緣檢測的時候,用到了方向導數。透鏡的畸變和邊緣檢測屬于選讀的內容,沒有需要的讀者可以略過。
除了數學知識,因為本書是從1開始3D圖形編程,而不是從0開始,所以要求讀者對OpenGL/Vulkan的編程接口有基本了解。
本書從透視投影、正交投影、光線追蹤三個方面對3D程序頂點紋理坐標1的含義,以及相關的幾何數學原理進行分析。對于透視投影的3D坐標1,本書推導了用戶使用的透視投影變換。和其他文獻對透視投影的解釋不同的是,本書提出了透視投影的幾何模型。這個模型不考慮性能的問題,僅要求幾何原理上的正確,因此這個模型相對容易理解。然后,基于這個幾何模型做了一些數學算法上的改進,得到了基于透視除法的透視投影。也分析了模型視圖變換、視口變換、紋理映射等對3D世界的1的影響。本書分析了一些基于透視投影的3D編程概念,如雙攝像頭立體成像、延遲渲染、陰影,以及虛擬現實透鏡產生的畸變等。對于正交投影,分析了正交投影的基本變換,同時分析了基于正交投影的Skia,包括Skia的頂點坐標、紋理坐標的特點。此外,本書還分析了光線追蹤的基本原理,并利用計算著色器模擬了部分物體的光線追蹤。最后,本書還介紹了一種通用的GPU多進程、多線程模型。
為了降低分析3D問題的復雜度,除了前面提到的將透視投影拆分為幾何模型和透視除法模型之外,本書還在分析透視投影矩陣的時候,將模型視圖矩陣簡化為單位矩陣,這樣的簡化,不影響結論的通用性,但是可以較好地降低問題的復雜度,同時也使測試驗證問題變得更加簡單。
感謝我的家人。尤其感謝我的妻子,她理解支持我的寫作,同時她也花了大量個人時間對本書進行了文字和格式上的校訂。也感謝我的兒子承承,每當我推導一個公式快要放棄的時候,看著身旁認真下圍棋的他,我又重拾了勇氣。
感謝英特爾公司。感謝公司開放的氛圍,讓我有業余時間去探索一些工程實踐中碰到的幾何數學問題。也感謝公司那些優秀聰明的同事,感謝在GPU圖形領域耕耘多年的葉建軍,他給本書的編寫提出了多處修改意見。
最后,感謝清華大學出版社的黃芝編輯,她為作者提供了很多排版布局方面的建議,最重要的是,給本書提供了一個合適的名字。
作者才疏學淺,書中疏漏在所難免,讀者如果有任何反饋意見,歡迎與作者取得聯系。
作者
2020年2月
pagetop