纯软件算法实现 3D 渲染
2019-7-30 ~ 2023-3-7
(0)
这个项目用 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
添加评论
取消回复