Back to rankings

skywind3000/mini3d

C

3D Software Renderer in 700 Lines !!

renderer3dsoftware-renderingsoftware-renderercgame-enginerasterizeropenglgraphicspicturepixels
Star Growth
Stars
2.3k
Forks
506
Weekly Growth
Issues
3
1k2k
Aug 2015Mar 2019Nov 2022Jul 2026
README

mini3d

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

README in English

特性

  • 单个文件:源代码只有一个 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 场景并实现漫游

原理讲解

相关项目

  • RenderHelp:另外一个支持可编程渲染管线的精简软渲染器实现,详细见 介绍

欢迎捐赠

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

欢迎关注

blog: https://skywind.me/blog

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

Related repositories
pixijs/pixijs

The HTML5 Creation Engine: Create beautiful digital content with the fastest, most flexible 2D WebGL renderer.

TypeScriptnpmMIT Licensecanvas2dpixijs
pixijs.com
47.8k5k
pmndrs/react-three-fiber

🇨🇭 A React renderer for Three.js

TypeScriptnpmMIT Licensereactthreejs
docs.pmnd.rs/react-three-fiber
31.5k1.9k
aidenybai/million

Optimizing compiler for React

TypeScriptnpmMIT Licensehacktoberfestmillion
old.million.dev
17.7k598
diegomura/react-pdf

📄 Create PDF files using React

TypeScriptnpmMIT Licensereactpdf
react-pdf.org
16.7k1.3k
jonobr1/two.js

A renderer agnostic two-dimensional drawing api for the web

JavaScriptnpmMIT Licensesvgwebgl
two.js.org
8.6k459
OGRECave/ogre

high-performance rendering backend (C++, Python, C#, Java)

C++MIT Licenseopengldirectx
ogrecave.github.io/ogre/
4.6k1k
Yomguithereal/react-blessed

A react renderer for blessed.

JavaScriptnpmMIT Licensereactrenderer
4.5k181
DiligentGraphics/DiligentEngine

A modern cross-platform low-level graphics library and rendering framework

BatchfileApache License 2.0gamedevopengl
diligentgraphics.com/diligent-engine/
4.4k385
layervault/psd.rb

Parse Photoshop files in Ruby with ease

RubyRubyGemsMIT Licenserubyphotoshop
3.1k197
pixijs/pixi-react

Write PIXI apps using React declarative style

TypeScriptnpmMIT Licensereactpixi
react.pixijs.io
2.9k205
commonmark/commonmark-java

Java library for parsing and rendering CommonMark (Markdown)

JavaMavenBSD 2-Clause "Simplified" Licensecommonmarkjava
2.7k331
LukasBanana/LLGL

Low Level Graphics Library (LLGL) is a thin abstraction layer for the modern graphics APIs OpenGL, Direct3D, Vulkan, and Metal

C++BSD 3-Clause "New" or "Revised" Licenserendererd3d11
2.6k156