May 18, 2022 Update(2023.03):重构了代码结构,增加了 MSAA 和 ShadowMap 实现,并且增加 OpenGL 和 Vulkan 版本,可运行中实时切换软件渲染器和 OpenGL/Vulkan 渲染器 这是疫情期间业余时间写的一个光栅化软渲染器,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)、相机 & 控制器、设置面板、不同模型节点渲染Continue reading “手写一个 C++ 软件渲染器”