纯软件算法实现 3D 渲染 金牌收录

这个项目用 EasyX 实现了软件渲染器,模仿了很多 OpenGL 的 API 定义(类似 OpenGL 运行库),然后在 main.cpp 里面写用户自己的模型及贴图代码。在源码中有详尽的说明。

软件运行可以得到如下的效果:

主要实现的功能:

  • 一些简单的数学运算(矩阵相乘,向量叉乘等)
  • 使用扫描线多边形填充算法绘制多边形
  • 线性插值(linear interpolation)
  • 透视校正插值(perspective correct interpolation)
  • 深度测试(用于消隐)

一些我想到的但是暂时没实现的功能:

  • 不支持 ddx 和 ddy,所以没有 Mipmap,因为实现起来比较麻烦。
    ddx 和 ddy 是指在屏幕空间上求 vbo 的偏导数。真正的 GPU 绘制的时候是在屏幕同时绘制多个像素,GPU 并行处理能力很强。
    比如当前 GPU 同时在屏幕上绘制四个点 (x,y), (x+1,y), (x,y+1), (x+1,y+1) 分别记为p1、p2、p3、p4,设前面三个点 p(即不包含点 (x+1, y+1))的纹理坐标分别为(u1,v1), (u2,v2), (u3,v3),则点 p1 上的:
    ddx(u) = (u2 - u1) / 1
    ddy(u) = (u3 - u1) / 1
    这个计算值可以用来计算 Mipmap,同时现在主流游戏引擎上面的法线贴图都是用 MikktSpace 计算切线空间,也需要求偏导数,但是对我们现在的这个渲染器来说,这些可以暂时不考虑。

编译环境:

  • Visual Studio 2019
  • EasyX_20190529(beta)

完整源码:

作者:桌子QQ:775697360
邮箱:775697360@qq.com
github:https://github.com/yangzhenzhuozz

添加评论