SoftRenderer
Software Renderer, Unique Task 2
Install / Use
/learn @dhbloo/SoftRendererREADME
软件光栅化渲染器
已实现的功能
- 三角形与直线的流水线光栅化
- CVV剪裁,背面剪裁
- 纹理加载与渲染
- Phong 着色
- 方便自定义的FragmentShader
Lambert,Phong,Blinn-Phong的方向光反射模型- 多线程渲染
操作
- 方向键旋转视角, W/S 缩小/放大视角
- 空格切换场景,Ctrl切换着色模式(分别是线框,颜色,纹理,混色纹理,着色器),Shift切换着色器(分别是深度,法线,Lambert,Phong,Blinn-Phong)
任务描述
主线任务: 基于C++实现一个简单的固定管线软件渲染器
- 渲染一个几何体
- 实现基本的变换(旋转、平移、缩放)
- 实现至少一种光照模型(Blinn-Phong、Lambort等)
- 完成熬测中的Graphics部分
支线任务
这个任务需要你在你的软件渲染器中实现多线程渲染. 你应该提供一个函数用于设置渲染线程数, 渲染时间应显著少于单线程渲染(存在一个合理的线程数设置, 使得多线程运行时间不超过单线程运行时间的二分之一). 如果你打算做这个任务, 请务必在动手写代码之前就考虑到这一点.
如果你不喜欢多线程, 你可以试试 SIMD (Single Instruction, Multiple Data, 单指令多数据), 尽管 DK 并没有接触过这玩意. 它和GPU的运作方式比较类似, 不过GPU通常在上层做了封装.
在你的软件渲染器中实现光线追踪. 如果你觉得这玩意比较难, 也可以先写一个仅支持镜面的光线追踪.
