㈠ 《計算機圖形學幾何工具演算法詳解》pdf下載在線閱讀全文,求百度網盤雲資源
《計算機圖形學幾何工具演算法詳解》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1_FF1Id2nDQk2Ed-QeBLEGA
㈡ 在線等計算機圖形學(第三版) Computer Graphics with OpenGL Third Edition 中文與英文書的電子版
我有這本書《計算機圖形學-用OpenGL實現(第2版)》和《3D計算機圖形學(原書第三版)》的一部分,不知道這兩本書對你來說有沒有用。如果,想要這兩本書,我可以不要分發給你。
㈢ 計算機圖形學(OPENGL):材質
本文同時發布在我的個人博客上: https://dragon_boy.gitee.io
在真實世界中,每種物體對燈光的反應都不同,我們在OpenGL中定義不同的材質來模擬不同種類的物體。在OpenGL中,我們可以定義一個材質結構體管理對光照的影響信息(比如Phong模型),例如:
這里提供一個 網站 ,總結了一些不同物體的材質.
下面是上面創建的結構體在片元著色器的main方法中的應用(針對Phong模型):
可以看到,我們通過 來訪問結構體的屬性,這和C語言類似。雖然我們全局聲明了材質結構體,但若是要為材質結構體的屬性賦值,我們還是必須逐一賦值:
運行程序我們會發現場景太亮:
為解決場景過亮問題,我們可以定義一個燈光結構體:
燈光結構體中的ambient,diffuse,specular分別代表對各個類型光的強度影響。我們可以這樣計算各個光照的效果:
設置燈光結構體的屬性:
運行結果如下:
可以看到結果好了很多。通過這種方式,我們就可以通過改變屬性來模擬不同的材質在不同燈光下的效果。
㈣ 求計算機圖形學第三版(OPENGL)英文原版作者Hearn
《計算機圖形學(第3版)》是一本內容豐富、取材新穎的計算機圖形學著作,並在其前一版的基礎上進行了全面擴充,增加了許多新的內容,覆蓋了近年來計算機圖形學的最新發展與成就。全書層次分明、重點突出,並附有使用OpenGL編寫的大量程序以及各種效果圖,是一本難得的優秀教材。
《計算機圖形學(第3版)》共分為15章,全面系統地講解了計算機圖形學的基本概念和相關技術。作者首先對計算機圖形學進行綜述;然後講解二維圖形的對象表示、演算法和應用,以及三維圖形的相關技術、建模和變換;接著介紹光照模型、顏色模型和動畫技術。《計算機圖形學(第三版)》還新增了有關層次建模和圖形文件格式的介紹,最後的附錄給出了計算機圖形學中用到的基本數學概念。
《計算機圖形學(第3版)》可作為信息技術等相關專業本科生和研究生教材或參考書,也可以作為計算機圖形學工作者的參考書。
㈤ 計算機圖形學(OPENGL):PBR理論
本文同時發布在我的個人博客上: https://dragon_boy.gitee.io
PBR,全稱phsically based rendering,即基於物理的渲染,是一系列基於相同理論的渲染技術的集合,更接近於真實的物理世界。因為PBR的目標是模擬真實的光照,它比Phong和Blinn-Phong更為真實,而且使用者可以不必調整一些不必要的參數區盡力模擬效果。
PBR本身也並不是完全的真實的物理模擬,只是基於物理的規則。一個PBR光照模型,需要滿足下面3個條件:
所有的PBR技術都基於微表面模型的理論。該理論定義了,所有微觀尺度的表面都可以被描述為微小獨立的鏡面,被稱為微表面。由於表面的粗糙度不同,這些微小的鏡面的排列會很不同:
微表面模型的近似採用一組能量守恆公式:離開表面的光的能量不能高於與表面發生作用前的光的能量,即能量會有一部分損失在物體內部。從上面的圖中我們看到,粗糙度越高,高光范圍越大,但高光的亮度越低。
對於能量守恆公式,我們需要區分漫反射和高光。當一束光線碰撞表面時,它就被分為折射部分和反射部分,反射部分形成高光,並不進入表面,這是廣義上的高光光照。這是部分留在物體內部分吸收,這是廣義上的漫反射光照。
其實和廣義上的模型相比還是有一細微差別,折射光線並不會馬上被吸收。在物理層面,我們可以將光線認為是一個帶有能量能量體,在失去所有能量前會一直向前移動,而失去能量的方式是碰撞。每個物體都可以考慮為內部包含大量的粒子,這些粒子會作為碰撞體和光線進行碰撞,每次碰撞,這寫粒子會吸收一部分光線的能量並轉化為熱能:
所有進入物體內部的折射光線的能量並不會被完全吸收,大多數都會向各個方向散射離開表面,而這些能量被吸收過的光線會參與表面的漫反射顏色計算。在PBR中,我們簡化這一流程,我們假定所有的折射光線被吸收的能量接著在一個很小的范圍內散射,忽略會離開表面一定距離的光線。有一些著色技術考慮了這些離開一定距離的光線,這一技術稱為次表面散射,被應用於模擬皮膚、大理石蠟燭這些材質。
一個額外的差別是金屬和非金屬表面的區別(也被稱為電解質和非電解質)。金屬表面的反射和折射所基於的原則和上述一致,但折射光線全被吸收不考慮散射,這就意味著金屬表面不考慮漫反射顏色只考慮高光。而非金屬表面和上面的原則完全一致。正因為這種金屬和非金屬的差別,它們在PBR流程中會被區別對待。
反射和折射的區別也給予了我們另一個不同於能量守恆公式的結論:它們兩個是相互排斥的。當光線反射時它永遠不會被吸收能量,所以進入表面的能量就全部都是折射光線。
這樣我們可以根據能量守恆公式首先計算高光部分,代表原光線能量被反射的部分,接著剩下的部分的能量直接用來計算折射,即漫反射部分|
通過這種方式,我們同時擁有了進入光線的反射值和折射值,同時也秉承了能量守恆原則。通過這種方式,讓反射值和折射值超過1是不可能的,這確保了它們的能量值的和不會超過進入的光線的能量。
根據上面講述的理論,我們可以得出一個名為渲染方程的工具,這個方程時目前模擬光照的最好的方法。基於物理的渲染使用的渲染方程的版本稱為反射方程,下面給出反射方程:
我們將積分區域分為按w所在軸100等分,對每一份dW值,我們計算相應的輻射率,循環將值疊加得到輻照率的結果。
反射方程將半球 內照射到 點的入射光的輻射率疊加起來,經由 縮放,並返回從觀察者方向的反射光輻射率 的總和。入射光輻射率可以來自光源或環境貼圖。
方法代表BRDF方程,也就是雙向反射分布方程,可以基於物體的材質屬性縮放入射光的輻射率權重。
BRDF,即雙向反射分布方程,將入射光方向,反射光方向,法線,表面粗糙度作為輸入參數。BRDF近似描述了每個輸入光對最後反射光的貢獻,例如,一個類似鏡面的表面,BRDF方程對幾乎所有的輸入光返回0值,除了與反射光方向 呈反射關系的輸入光返回1值。
BRDF基於微表面模型近似模擬材質的反射和折射屬性。為了讓BRDF的結果物理上可信,它必須遵循能量守恆方程。技術上來說,Blinn-Phong其實是使用相同的 和 作為輸入的BRDF,但由於Blinn-Phong並不遵守能量守恆定律,它也不是基於物理的模擬。目前存在許多不同種類的BRDF來基於物理模擬表面材質,對於實時渲染的PBR流程使用的是Cook-Torrance BRDF。
Cook-Torrance BRDF包含一個漫反射和一個高光部分:
這里我們使用Trowbridge-Reitz GGX:
幾何函數描述的是每個微表面之間的相互遮擋關系:
菲涅爾等式描述了不同觀察視角的反射光和折射光的比率。每個表面或材質都有一個基礎反射率,對應垂直觀察表面,從其它角度觀察反射會更加明顯。舉個例子,看看周圍的桌子,或木製,或金屬制,從垂直方向觀察的話會得到基礎反射率的效果,如果近乎平行表面觀察的方向觀察表面,反射會非常明顯。所有的表面從這種近乎平行的方向觀察得到的強烈反射結果就是菲涅爾效應。
菲涅爾等式本身十分復雜,這里使用Fresnel-Schlick來近似模擬:
Fresnel-Schlick函數實現:
通過Cook-Torrance BRDF的每個組件,我們可以獲得最終的反射方程:
這個反射方程完整的描述了一個PBR模型。
在實際工作中,往往使用各種貼圖來控制PBR流程中的表面的參數,描述了平面中的某一點對光照的反應,即:這個點的金屬度,粗糙度,平面如何應對不同波長的光。
下面是PBR流程中使用的幾張貼圖,並使用這幾張貼圖進行渲染輸出:
最後,給出原文地址供參考: https://learnopengl.com/PBR/Theory
㈥ 計算機圖形學(OPENGL):基礎光照
本文同時發布在我的個人博客上: https://dragon_boy.gitee.io
光往往不來源於單一的光源,而是多個光源將光線散射到我們周圍。光線可以散射和四處反射,這樣會直接或間接影響物體的顏色。基於這種理論的演算法是全局光照演算法,但這里我們暫時將環境光模型考慮為單一的顏色,並降低它的光照強度來顯得更為真實。比如我們在待渲染的立方體的片元著色器中這么定義:
運行程序之後,結果如下:
現在立方體有了一個基礎的環境光顏色。
環境光照的細節並不豐富,但添加漫反射光照後,物體的顏色信息就豐富了起來。我們想像一束直射光線:
由於我們定義的是頂點,那麼這里的法線就是頂點法線,可以通過與周圍的頂點找出一個平面來計算該頂點處的頂點法線。由於立方體並不復雜,這里我們就簡單地給出頂點的法線屬性:
修改頂點著色器:
同時記得修改頂點屬性指針。(燈光立方體我們不使用法線屬性)
我們需要在片元著色器中定義燈光的位置:
接著在渲染循環中賦值:
接下來我們需要片元的位置,這個可以在頂點著色器中計算(通過將頂點的位置和model矩陣相乘):
接著需要在片元著色其中計算漫反射光照對顏色的影響,首先要輸入FragPos;
接著標准化法線,並通過lightPos和FragPos相減來獲得燈光的方向,並標准化:
之後計算燈光方向和法線的點積來獲得漫反射光照的影響度,當然不能小於0,即光線和法線的角度不能大於90度,我們通過max函數來限制大小:
最後,我們可以在結果顏色中添加漫反射光照的影響了:
運行結果如下:
可以看到立方體的顯示更為真實了。
之前我們將法線直接從頂點著色器傳入了片元著色器,但由於片元著色器的光照計算在世界空間中,那麼我們應該將model矩陣作用於法線來進行一些轉換,但這里有一些問題。首先法線僅僅代表方向,並不代表確切的位置。其次,法線是三維向量,並沒有w組件,所以model矩陣的平移將不會影響法線,也就是說我們要先舍棄model的第四個維度再與法線向量相乘。然後就是model矩陣中會包含非全局縮放,如果這樣的話,法線與model矩陣相乘後將可能不再垂直於平面:
針對這些問題的解決方式是專門為法線定義model矩陣,做法是將原model矩陣的逆矩陣轉置後降至3維:
注意,在著色器中計算逆矩陣開銷很大,最好能後在CPU中計算好再送往著色器。
類似於漫反射光照,高光的計算基於光線的方向和片段的法線,其次,還要加入視線的方向。高光的實際計算和反射光線、視線方向有關:
我們通過光線的方向和法線計算反射光線的方向,接著與視線方向作點積來計算高光影響。視線方向通過攝像機位置和片段位置作減法運算得到。(我們這里選擇在世界空間中計算高光,當然也可以在視圖空間中計算高光,在視圖空間中計算的好處是攝像機的位置即觀察者的位置永遠在原點。)
我們在片元著色器中添加觀察位置:
並將攝像機的位置賦予這個變數:
接著定義一個控制高光強度的參數:
接著計算觀察方向和反射光線方向(通過內建reflect函數計算):
reflect函數要求第一個參數指向片段,所以我們反向燈光方向。
接下來計算高光對顏色的影響:
pow方法中的32是反光度,用來控制高光的大小和范圍:下面是一些不同反光度的效果:
可以看到反光度越高,高光越亮,同時高光的范圍更小。
最後,我們加上高光的顏色影響:
運行結果如下:
㈦ 求《3D計算機圖形學odf(原書第三版)》全文免費下載百度網盤資源,謝謝~
《3D計算機圖形學odf(原書第三版)》網路網盤pdf最新全集下載:
鏈接: https://pan..com/s/1__yJNprGQuh49h8dFwp11w
㈧ 計算機圖形學(OPENGL):發光
本文同時發布在我的個人博客上: https://dragon_boy.gitee.io
從顯示器上辨別一個光源是比較困難的,我們可以通過讓光源發光來讓光源突出。發光是一種後期處理效果,它在光源外圍生成一圈模糊的光亮范圍來模擬輝光效果。下面是一組對比例子:
HDR和發光技術可以很好的結合起來,不過人們常將HDR和發光技術混淆,但二者基於的規則是不同的。發光技術可以通過默認8bit的幀緩沖來實現效果,但HDR不行。不過HDR可以讓發光更有效的實現。
為實現發光,我們先正常渲染場景,接著提取出場景的HDR顏色緩沖,以及一張只有亮的場景區域的圖片。接著處理這張提取出來的亮度圖片,進行模糊處理,並將結果附加到原來的HDR場景圖片上。
實現過程如下。我們首先渲染一個包含4個光源的場景,這4個光源是帶有顏色的立方體,亮度值在1.5到15.0之間,我們用HDR渲染這個場景,如下:
我們接著模糊這一紋理圖片:
發光技術的第一步要求我們從場景中提取兩張圖片,我們可以使用不同的著色器渲染場景兩次,將結果存儲在不同的幀緩沖中。除此之外,我們也可以使用多重渲染目標(MRT),這允許我們配置片元著色器的多個輸出,也就允許我們只渲染一次場景來提取兩張不同的圖片。我們可以在片元著色器的開頭配置不同顏色緩沖的位置:
這一方式只有在我們有多個緩沖需要寫入時有用。為了這一目的,我們需要將多個顏色緩沖對象綁定至當前的幀緩沖。我們可以為第一個顏色緩沖使用GL_COLOR_ATTACHMENT0附加項,第二個顏色緩沖使用GL_COLOR_ATTACHMENT1附加項:
接著,我們需要告知我們想要渲染至多個顏色緩沖,通過glDrawBuffers方法。OpenGL默認只渲染到幀緩沖的第一個顏色緩沖附加項,忽略其它的顏色緩沖附加項。我們可以將顏色附加項數組傳入glDrawBuffers:
這樣做的話,當使用一個幀緩沖渲染時,便會按照我們在片元著色器中的配置渲染到兩個顏色緩沖。我們在片元著色器中進行顏色提取:
我們這里首先正常計算光照,並將顏色傳到第一個位置的FragColor作為輸出,接著我們使用這個FragColor來判斷亮度是否超過一個特定的閾值,我們可以通過將其灰度化來判斷(將片段顏色和我們給定的權重點積進行灰度化),如果亮度大於1.0(或其它閾值),我們就將片段顏色傳入BrightColor中。
上述的過程也表明了發光和HDR渲染的配合,因為HDR允許顏色范圍高於1.0,我們才可以設置一個高於LDR范圍的閾值來進行亮度判斷。
下面是兩張提取出來的顏色圖片:
接著我們處理右邊這張圖片,我們這里使用高斯模糊。
高斯模糊基於高斯曲線:
由於高斯曲線中間的值高,兩邊的值低,且曲線的漸變比較平滑,所以可以用來進行比較自然的模糊。比如我們對一個像素片段使用包括其在內的32*32放格進行模糊,離中心像素片段的距離越遠,權重越小,這就是高斯模糊。
高斯模糊的步驟是分離兩個維度,其中一個代表水平的權重,另一個代表垂直的權重。我們首先對水平方向的片段進行權重分布,接著對結果的垂直方向進行權重分布,這一過程又稱為兩步高斯模糊,流程圖如下:
接著我們創建兩個幀緩沖,每個擁有一個顏色緩沖紋理:
接著在我們獲得HDR場景和亮度圖後,我們首先用亮度圖紋理填充其中一個幀緩沖,接著模糊10次,水平5次,豎直5次。
在每一次循環中,我們根據要模糊水平方向的紋理還是豎直方向的紋理來綁定兩個之中的一個幀緩沖,並將另一個幀緩沖的顏色緩沖作為紋理去模糊。
最後,模糊5次的結果:
最後,我們要將這張模糊的圖片疊加到原來的HDR圖片上。
在最後的渲染中,我們在片元著色器中如下設置:
注意我們在色調映射前將發光結果混合進來,以保證細節可以比較好的傳遞至LDR范圍。最後的疊加效果如下:
㈨ 《計算機圖形學教程第三版》pdf下載在線閱讀全文,求百度網盤雲資源
《計算機圖形學教程第三版》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1N7znxK2CdBrExSQsezBT3A
㈩ 《計算機圖形學基礎教程VisualC++版第四版》pdf下載在線閱讀全文,求百度網盤雲資源
《計算機圖形學基礎教程VisualC++版第四版》網路網盤pdf最新全集下載:
鏈接: https://pan..com/s/1HfkyTeiuyobNWSwFcEYirQ