# mini3d **Repository Path**: xinyunliu/mini3d ## Basic Information - **Project Name**: mini3d - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-14 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 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](https://github.com/skywind3000/mini3d/releases) 演示 === 纹理填充:RENDER_STATE_TEXTURE ![](https://raw.githubusercontent.com/skywind3000/mini3d/master/images/mini_1.png) 色彩填充:RENDER_STATE_COLOR ![](https://raw.githubusercontent.com/skywind3000/mini3d/master/images/mini_0.png) 线框绘制:RENDER_STATE_WIREFRAME ![](https://raw.githubusercontent.com/skywind3000/mini3d/master/images/mini_2.png) 增加光照和二次线性插值(朋友给 Mini3D 增加的光照效果截图) ![](https://raw.githubusercontent.com/skywind3000/mini3d/master/images/mini_3.png) 基础作业 ======= * 增加背面剔除 * 增加简单光照 * 提供更多渲染模式 * 实现二次线性差值的纹理读取 进阶作业 ======= * 推导并证明程序中用到的所有几何知识 * 优化顶点计算性能 * 优化 draw_scanline 性能 * 从 BMP/TGA 文件加载纹理 * 载入 BSP 场景并实现漫游 欢迎捐赠 ======= ![](https://raw.githubusercontent.com/skywind3000/mini3d/master/images/donation.png) 您的捐助是对该教程的最大肯定,欢迎使用支付宝手扫描上面的二维码,进行捐赠。捐赠款项将用于完善教程文档和图例,以及帮助我写出更多有意思的教程来。 欢迎关注 blog: http://www.skywind.me zhihu: https://www.zhihu.com/people/skywind3000