把 skywind3000 前辈的 mini3d 项目(https://github.com/skywind3000/mini3d/releases )改写成python版,并增加了大量注释(主要是关于实现原理的)。源代码中所需知识都在《3D游戏编程大师技巧》里有详细解释。
用python是因为不想搞windows的函数(有现成的窗口库),而且开发简单,可以专注于渲染器本身的功能。但是写完发现python渲染效率极低,所以这个只能用于学习渲染逻辑,不具有实用意义。
以后有空会完成作业部分。
以下来自skywind3000:
- 单个文件:一个文件实现所有内容,容易阅读。
- 独立编译:没有任何第三方库依赖,没有复杂的工程目录。
- 模型标准:标准 D3D 坐标模型,左手系加 WORLD / VIEW / PROJECTION 三矩阵
- 实现裁剪:简单 CVV 裁剪
- 纹理支持:最大支持 1024 x 1024 的纹理
- 深度缓存:使用深度缓存判断图像前后
- 透视贴图:透视纹理映射以及透视色彩填充
- 边缘计算:精确的多边形边缘覆盖计算
- 实现精简:渲染引擎只有 700行,模块清晰,主干突出。
- 详细注释:主要代码详细注释
- 增加背面剔除(已完成)
- 增加简单光照
- 提供更多渲染模式
- 实现二次线性差值的纹理读取
- 推导并证明程序中用到的所有几何知识
- 优化顶点计算性能
- 优化 draw_scanline 性能
- 从 BMP/TGA 文件加载纹理
- 载入 BSP 场景并实现漫游