手写一个 C++ 软件渲染器

这是疫情期间业余时间写的一个光栅化软渲染器,C++ 实现,代码地址: https://github.com/keith2018/SoftGLRender 除了带纹理渲染,也支持 wireframe,并且支持查看 frustum 裁剪结果 整体代码量不大,基于C++11,实现了基本的渲染管线流程,并且在渲染器上层加了一些适配逻辑,比如模型加载、相机、设置面板等,使得整个工程可以独立地跑起来,可以方便地加载 GLTF 模型(整个工程也可以看作一个 GLTF Viewer),编译自测过 MacOS、Windows 工程结构 主要有 renderer、shader、app 三个部分: renderer:渲染器实现,输入 Mesh 数据 (Vertex、Indices 等),绑定好自定义的 Shader, 然后启动管线流程,绘制到 FrameBuffer; shader:模拟了可编程渲染管线结构,支持 VertexShader 和 FragmentShader,可以方便地将现有 GLSL 代码改改移植过来跑,工程里内置实现了一些基本的 Shader,如 Blinn-Phong光照、天空盒、PBR&IBL 等; app:这部分主要是 Viewer 层逻辑,包括 GLTF 加载(基于Assimp)、相机 & 控制器、设置面板、不同模型节点渲染 pass 的组织等; 渲染管线 基本的管线流程都有实现: Vertex Shading View Frustum Culling Perspective Divide Screen Mapping BackFrontContinue reading “手写一个 C++ 软件渲染器”