前往
大廳
主題

GAMES101-現代電腦圖形學入門-作業三

楓之焰 | 2024-01-04 04:10:52 | 巴幣 0 | 人氣 86

目標

1. 修改函數 rasterize_triangle(const Triangle& t)  在此處實作與作業 2 類似的插值演算法,實現法向量、顏色、紋理顏色的插值。
2. 修改函數 phong_fragment_shader() 實作 Blinn-Phong 模型計
算 Fragment Color.
3. 修改函式 texture_fragment_shader() 在實作 Blinn-Phong的基礎上,將紋理顏色視為公式中的 kd,實作 Texture Shading Fragment Shader.
4. 修改函式 bump_fragment_shader() 在實作 Blinn-Phong 的基礎上,仔細閱讀該函數中的註釋,實作 Bump mapping.
5. 修改函數 displacement_fragment_shader() 在實作 Bump mapping 的基礎上,實作 displacement mapping.
6.加分題:使用雙線性插值進行紋理取樣

實作

1. 修改函數 rasterize_triangle(const Triangle& t)  在此處實作與作業 2 類似的插值演算法,實現法向量、顏色、紋理顏色的插值。

要使用頂點座標對像素做插值很重要的一點是必須在視圖空間中計算,因為投影空間中的三角面已經變形了,會得到不正確的結果
alpha,beta,gamma代表對應的頂點的對邊子三角形在三角形中所占的面積
alpha+beta+gamma=1,透過這三個參數即可對三角形的資料做插值

2. 修改函數 phong_fragment_shader() 實作 Blinn-Phong 模型計算 Fragment Color.

依照Blinn-Phong的光照模型去寫就可以了
渲染出來長這樣

3. 修改函式 texture_fragment_shader() 在實作 Blinn-Phong的基礎上,將紋理顏色視為公式中的 kd,實作 Texture Shading Fragment Shader.

這邊只是將三角形插值所得到的tex_coords用來取圖片的顏色,將漫反射的kd值換成texture的color。
效果長這樣

4. 修改函式 bump_fragment_shader() 在實作 Blinn-Phong 的基礎上,仔細閱讀該函數中的註釋,實作 Bump mapping.

這邊要讀取Bump貼圖更改法線,但課堂中完全沒提到這個計算,這邊用到了TBN 矩陣和切線空間,有空再回來學。

5. 修改函數 displacement_fragment_shader() 在實作 Bump mapping 的基礎上,實作 displacement mapping.

bump shader+texture shader的效果,把前面的程式碼都加在一起就能實現了

6.加分題:使用雙線性插值進行紋理取樣

雙線性紋理採樣的原理跟SSAA滿像的,取像素鄰近的四個點,先對水平方向做插值,再做垂直方向,總共要做三次插值

創作回應

更多創作