Awesome
mini3d
3D软件渲染教程,并没有任何性能优化,主要向人说明如何写一个固定管线的软件渲染器。虽然主体代码只有 700行,但是麻雀虽小,五脏俱全。
特性
- 单个文件:源代码只有一个 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 场景并实现漫游
原理讲解
相关项目
- RenderHelp:另外一个支持可编程渲染管线的精简软渲染器实现,详细见 介绍。
欢迎捐赠
您的捐助是对该教程的最大肯定,欢迎使用支付宝手扫描上面的二维码,进行捐赠。捐赠款项将用于完善教程文档和图例,以及帮助我写出更多有意思的教程来。
欢迎关注
blog: https://skywind.me/blog