Skip to content

Latest commit

 

History

History
77 lines (51 loc) · 3.42 KB

README.en.md

File metadata and controls

77 lines (51 loc) · 3.42 KB

mini3d

3D software rendering tutorial, without any performance optimization, mainly explains how to write a fixed pipeline software renderer. Although the main code is only 700 lines, it is small but complete.

Features

  • Single File: The source code consists of only one file, mini3d.c, which implements all the functionality. It is easy to read and understand.
  • Independent Compilation: There is no third-party library dependency and no complex project directory.
  • Model Standard: Uses the standard D3D coordinate model, left-handed system with WORLD/VIEW/PROJECTION matrices.
  • Clipping Implementation: Implements simple CVV (Canonical View Volume) clipping.
  • Texture Support: Supports textures up to a maximum of 1024 x 1024.
  • Depth Buffering: Uses a depth buffer to determine the order of image rendering.
  • Perspective Texture Mapping: Implements perspective texture mapping and perspective color filling.
  • Edge Calculation: Accurately calculates polygon edge coverage.
  • Simplified Implementation: The rendering engine consists of only 700 lines of code, with clear modules and a prominent main structure.
  • Detailed Comments: The primary code is well-documented with detailed comments.

Compile

Demonstration

Texture Mapping:RENDER_STATE_TEXTURE

Color Filling:RENDER_STATE_COLOR

Wireframe Rendering:RENDER_STATE_WIREFRAME

Added Lighting and Bicubic Interpolation (screenshot of lighting effect added by a friend to Mini3D)

Basic TO-DO:

  • Add backface culling
  • Implement simple lighting
  • Provide more rendering modes
  • Implement texture sampling with bicubic interpolation

Advanced TO-DO:

  • Derive and prove all geometric knowledge used in the program
  • Optimize vertex computation performance
  • Optimize draw_scanline performance
  • Load textures from BMP/TGA files
  • Load BSP scenes and implement roaming.

Explanation of principles

Related Projects

Welcome to donate:

Your donation is the greatest recognition for this tutorial. You are welcome to use Alipay to scan the QR code above to make a donation. The donated funds will be used to improve the tutorial documentation and illustrations, as well as to help me write more interesting tutorials.

Welcome to follow us:

blog: https://skywind.me/blog

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