2000行代碼實現軟渲染引擎


代碼地址:https://github.com/sdlwlxf1/tinyEngine

終於實現了自己的軟渲染器,圖形學的學習暫時告一段落。代碼參考知乎上的韋易笑大神的回答,自己加入了很多功能包括:

  • 將原來的Gouraud着色改為phong着色
  • 加入一個平行光和4個點光源,物體材質
  • 背面剔除
  • 利用libpng讀取外部紋理
  • 實現雙線性紋理濾波和mipmap
  • 完整實現3D裁剪算法
  • 簡單的投影
  • 利用sdl2實現了mac、ios、windows多平台支持
  • 3D漫游和object簡單封裝

知乎我的回答鏈接

工程目錄:

  • external:依賴庫文件
  • project:多平台項目工程以及跟平台相關代碼
  • resources:核心代碼和資源

依賴庫:

跨平台的多媒體開發函數庫,非常好用,cocos2dx也使用到了它哦

版本是SDL2-2.0.5,我已經交叉編譯成了靜態庫,可以直接使用

跨平台的png格式讀取處理庫,如果靜態庫有問題,可以下載源代碼下載地址,自行編譯

多平台支持:

目前支持mac、ios、windows三個平台,android就暫時不弄了,過程太繁瑣。

(windows的release好像有問題)

下面是重點!!

想要通過該工程學習光柵化渲染的同學,請務必備好以下兩本書籍:

  • 《3D數學基礎:圖形與游戲開發》(建議認真看完)
  • 《3D游戲編程大師技巧》上下冊

還有其他一些其他資料可以輔助理解

《[計算機圖形學].(美國)Peter.Shirley》

learnopengl-cn一個學習opengl的網站,講解光影部分挺好

代碼簡介

tiny3D.h

核心的數學算法和光柵化渲染實現,掌握了它可以說你就徹底弄明白了光柵化渲染

數學部分,全部是重點,特別是矩陣操作等,透視矩陣和旋轉矩陣,是重中之重。

光柵化部分,為了實現phong光照加入了重心坐標計算,可能還有更好的實現方法,有能力的同學可以重構之。

main.c

非核心代碼,包括sdl和紋理處理,有能力的同學可以自己實現並移植到任何平台

關於學習方法

因為我也是通過參考大神韋易笑的代碼來學習圖形學的。這里我可以提供一些我的學習經驗

首先要端正自己的學習態度,不要認為軟渲染有多難,看整個實現也不過1000行左右代碼,當然也不要被這微小的代碼量所迷惑,量少就意味每一行代碼每一個函數都潛藏着巨大的知識量。如果有不明白的,一定要查閱上面提到的兩本書,比如透視和旋轉的算法公式,最好都要弄明白推導過程。然后自己實現一遍代碼,通過實踐加深對原理的理解。

數學部分在於理解,光柵化部分在於實現

請認真實現自己的光柵化部分,每個人的實現方法都不同,也許你的實現會更高效

個人認為軟渲染是學習圖形學的一個關鍵點。

等你也實現了自己的軟渲染引擎,再看unity3D和shader,就會有一種醍醐灌頂的感覺,甚至可以自行腦補其實現方法呢

下面是截圖:


免責聲明!

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



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