mini3d

3D软件渲染引擎700行!! (3D Software Render Engine in 700 Lines !!)

Github stars Tracking Chart

mini3d

3D软件渲染教程,并没有任何性能优化,主要向人说明如何写一个固定管线的软件渲染器。虽然主体代码只有 700行,但是麻雀虽小,五脏俱全。

特性

  • 单个文件:源代码只有一个 mini3d.c,单个文件实现所有内容,容易阅读。
  • 独立编译:没有任何第三方库依赖,没有复杂的工程目录。
  • 模型标准:标准 D3D 坐标模型,左手系加 WORLD / VIEW / PROJECTION 三矩阵
  • 实现裁剪:简单 CVV 裁剪
  • 纹理支持:最大支持 1024 x 1024 的纹理
  • 深度缓存:使用深度缓存判断图像前后
  • 透视贴图:透视纹理映射以及透视色彩填充
  • 边缘计算:精确的多边形边缘覆盖计算
  • 实现精简:渲染引擎只有 700行,模块清晰,主干突出。
  • 详细注释:主要代码详细注释

编译

演示

纹理填充:RENDER_STATE_TEXTURE

色彩填充:RENDER_STATE_COLOR

线框绘制:RENDER_STATE_WIREFRAME

增加光照和二次线性插值(朋友给 Mini3D 增加的光照效果截图)

基础作业

  • 增加背面剔除
  • 增加简单光照
  • 提供更多渲染模式
  • 实现二次线性差值的纹理读取

进阶作业

  • 推导并证明程序中用到的所有几何知识
  • 优化顶点计算性能
  • 优化 draw_scanline 性能
  • 从 BMP/TGA 文件加载纹理
  • 载入 BSP 场景并实现漫游

欢迎捐赠

您的捐助是对该教程的最大肯定,欢迎使用支付宝手扫描上面的二维码,进行捐赠。捐赠款项将用于完善教程文档和图例,以及帮助我写出更多有意思的教程来。

欢迎关注

blog: http://www.skywind.me

zhihu: https://www.zhihu.com/people/skywind3000

Overview

Name With Ownerskywind3000/mini3d
Primary LanguageC
Program languageC (Language Count: 1)
PlatformWindows
License:MIT License
Release Count3
Last Release Namev1.2 (Posted on 2015-08-12 15:00:03)
First Release Namev1.0 (Posted on 2015-08-11 00:03:06)
Created At2015-08-09 16:50:34
Pushed At2023-05-10 02:56:13
Last Commit At2023-05-10 10:56:13
Stargazers Count2.1k
Watchers Count98
Fork Count499
Commits Count48
Has Issues Enabled
Issues Count6
Issue Open Count3
Pull Requests Count3
Pull Requests Open Count2
Pull Requests Close Count3
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private
To the top