mini3d
3D軟件渲染教程,並沒有任何性能優化,主要向人說明如何寫一個固定管線的軟件渲染器。雖然主體代碼只有700行,但是麻雀雖小,五臟俱全。
【README in English】
特性
- 單個文件:源代碼只有一個mini3d.c,單個文件實現所有內容,容易閱讀。
- 獨立編譯:沒有任何第三方庫依賴,沒有復雜的工程目錄。
- 模型標準:標準D3D 坐標模型,左手系加WORLD / VIEW / PROJECTION 三矩陣
- 實現裁剪:簡單CVV 裁剪
- 紋理支持:最大支持1024 x 1024 的紋理
- 深度緩存:使用深度緩存判斷圖像前後
- 透視貼圖:透視紋理映射以及透視色彩填充
- 邊緣計算:精確的多邊形邊緣覆蓋計算
- 實現精簡:渲染引擎只有700行,模塊清晰,主幹突出。
- 詳細註釋:主要代碼詳細註釋
編譯
- mingw: gcc -O3 mini3d.c -o mini3d.exe -lgdi32
- msvc: cl -O2 -nologo mini3d.c
- 已編譯版本: https://github.com/skywind3000/mini3d/releases
演示
紋理填充:RENDER_STATE_TEXTURE
色彩填充:RENDER_STATE_COLOR
線框繪製:RENDER_STATE_WIREFRAME
增加光照和二次線性插值(朋友給Mini3D 增加的光照效果截圖)
基礎作業
- 增加背面剔除
- 增加簡單光照
- 提供更多渲染模式
- 實現二次線性差值的紋理讀取
進階作業
- 推導並證明程序中用到的所有幾何知識
- 優化頂點計算性能
- 優化draw_scanline 性能
- 從BMP/TGA 文件加載紋理
- 載入BSP 場景並實現漫遊
原理講解
- 韋易笑:OpenGL 和DirectX 是如何在只知道頂點的情況下得出像素位置的?
- 韋易笑:計算機底層是如何訪問顯卡的?
相關項目
- RenderHelp:另外一個支持可編程渲染管線的精簡軟渲染器實現,詳細見介紹。
歡迎捐贈
您的捐助是對該教程的最大肯定,歡迎使用支付寶手掃描上面的二維碼,進行捐贈。捐贈款項將用於完善教程文檔和圖例,以及幫助我寫出更多有意思的教程來。
歡迎關注
blog: https://skywind.me/blog
zhihu: https://www.zhihu.com/people/skywind3000