[圖形圖像]C++實現的軟件光柵器


目前渲染部分基本告一段落,實現了雙線性、三線性、mipmap紋理采樣、重復/鏡像uv尋址模式、鏡面光和紋理的疊加、gouraud着色、phong着色、z緩存、1/z緩存、透視紋理/光照修正、平面裁剪(含三角形分割)、正交投影攝像機。
 
以后如果再增加功能,大概就是頂點動畫之類,重心應該在引擎層了,渲染層基本完畢。
 
上圖。

 

第1張:

從坐到右,從上到下。無紋理、無鏡面光、無深度緩沖,依次是:

1. 線框。

2. 純色。 即每個三角形一個顏色。

3. flat着色(相比上次,修正后的效果好多了)。也是每個三角形一個顏色,但是這個顏色是參照了光照情況的。

4. gouraud着色。根據光照計算每個三角形的頂點顏色,三角形內部根據頂點顏色進行線性插值。

5. phong着色(這里分辨率太低,看不出和gouraud的區別)。每個像素分別計算光照。

第2張:

 分別是flat、gouraud、phong着色,相比第1張,加入了鏡面光(注意茶壺的不少地方出現了白色的光斑)。

 

第3張:

 在上一張的基礎上引入了紋理。注意壺嘴上的光斑,一個比一個細膩。這一組圖仍然沒打開深度緩沖,因此顯示不太正確。 

 

第4張:

 高分辨率的茶壺。軟件渲染瓶頸首先是像素處理,因此這么大的茶壺,幀率特別低。

兩張分別對應低、高兩套設置。

第一個,gouraud着色 + 最近點采樣 + 三角形排序(油畫家算法)+ 鏡面光。幀率123。

第二個,phong着色 + 三線性采樣 + 1/z緩沖 + 鏡面光。幀率30。

 

 第5張:

 平面裁剪。第一個是一個豎着的平面,第一個是一豎一橫兩個平面。注意裁剪邊緣三角形密度較大,因為進行了三角形分割。

 

第5-2張:

正交投影和平面裁剪。

正交投影,相比普通的透視投影,失去了近大遠小的效果。

第二個茶壺,從側面來觀察裁剪平面,證實了這確實是三維空間的裁剪,而非屏幕上的像素裁剪。

 

第6張:

 高分辨率來了!

在屏幕上繪制兩個大三角形,展示紋理過濾效果。

從上到下分別是:線框、最近點采樣、雙線性過濾、三線性過濾、透視紋理修正。

三線性過濾:這里很難看出和雙線性的區別,但是在程序中切換狀態時是能察覺到變化的。

透視紋理修正:操,屎都給我嚇出來了!跟它一比,難怪之前總覺得前面兩張怪怪的。這證明了,大紋理三角形不能亂用啊...

 

 

第7張:

演示紋理地址尋址方式。

整張圖紋理坐標是-2~+2,從上到下,尋址方式依次為箝位、重復、鏡像。 

 

第8張:

演示mipmap。

 紅色是第0層,綠色是第1層,藍色是第2層,淡藍色是第三層,等等。

 

  

再貼一個骷髏頭吧,6萬個面,還能有30幀,很好。畢竟我在頂點處理環節非常謹慎的。

 gouraud + 鏡面光 + 三角形排序(油畫家算法,代替z緩沖)。

 

 看了一下水銀上的記錄,這個項目大概開始10來天了,成品是9000行C++代碼,目前效果還是滿意的。能夠享受成品從視覺上帶來的成就感,這是圖形相比其他技術的優點。

 

代碼6、7月份分享,執行文件在下面:

 

 http://115.com/file/anwxb9xp#Scan軟件光柵.rar

 

記得看里面的readme.txt。

注意,如果你運行后顯示不自然(遮擋關系錯誤,尤其是骷髏頭),嘗試按幾下4開啟深度緩沖,或者按幾下5開啟油畫家算法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM