ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

VulkanSceneGraph学习教程(二)

VulkanSceneGraph学习教程(二) 第 2 章 VSG 整体架构概览本章定位建立「模块 → 职责」的地图知道每类功能该去哪个目录/哪个库找。后续章节会逐个深入。2.1 本章目标理解 VSG 的「单一核心库 外部组件库」分层认识核心库vsg的子模块目录及其职责分清哪些能力已并入核心、哪些需要额外安装组件库。2.2 前置准备在深入各模块之前先通过一张总体框架图建立全局认知。下图展示了 VSG 的整体架构以及核心库与外部组件库之间的协作关系图中各模块的关系可概括为核心库vsg是渲染引擎的主体其中core提供引用计数与内存管理等基础设施nodes负责组织场景图state与commands描述渲染状态与命令录制app层的Viewer负责把场景图编译并提交到vk封装的 Vulkan 对象最终呈现到窗口外部组件库则通过工厂函数如vsg::read()或集成接口在场景构建或窗口嵌入等环节与核心库协作。建议先读完第 1 章理解 VSG 的设计理念。本章以源码目录include/vsg/为线索讲解可对照本仓库阅读。2.3 单一核心库vsgVSG 的核心是一个C namespacevsg对应一个 CMake targetvsg安装后导出为vsg::vsg。它不是由多个独立库如vsgCore、vsgPlatform…组合而成——所有子模块都编译进同一个vsg库通过子目录组织代码include/vsg/ ├── core/ 引用计数(ref_ptr)、Object、Allocator、内存管理 ├── nodes/ Node / Group / MatrixTransform / Switch / LOD / Geometry / StateGroup / … ├── state/ Pipeline、Descriptor、ShaderModule、VertexInputState、ViewportState、… ├── commands/ Draw* / Bind* / Commands 等可录制命令对象 ├── app/ Viewer / Window / Camera / View / RenderGraph / CommandGraph ├── io/ 序列化、文件读写、DatabasePager异步分页加载 ├── platform/ Window 的窗口系统后端Win32 / Xcb / MacOS / Android / headless ├── maths/ 矩阵/向量/四元数dmat4, dvec3, quat 等 ├── text/ 文字渲染⚠️ 已并入核心不是外部库 ├── raytracing/ 光线追踪⚠️ 已并入核心 ├── lighting/ 光照相关类型方向光、点光源等 ├── threading/ 线程与任务封装 ├── ui/ 事件、UI 事件PointerEvent / KeyEvent / WindowEvent ├── utils/ ShaderSet / GraphicsPipelineConfigurator 等便捷工具 ├── vk/ Vulkan 对象轻量封装Device / Buffer / Image / RenderPass … ├── animation/ Animation / AnimationGroup / AnimationManager 及各类 Sampler └── meshshaders/ 网格着色器支持记忆要点#include vsg/all.h会引入全部核心头日常开发也可按需只引子模块头如vsg/app/Viewer.h。2.4 外部组件库独立仓库核心保持精简复杂或特定领域的能力放在独立仓库需额外find_package并链接组件库职责典型用途vsgXchange模型与图像格式加载glTF、OBJ、KTX2、PNG…第 13 章加载 3D 模型vsgImGui集成 Dear ImGui 调试界面第 22 章实时参数调节vsgQt嵌入 Qt 窗口/控件桌面应用集成vsgUnity与 Unity 互操作跨引擎vsgVRVR/AR 支持头显渲染组件库通过 CMake 的find_package(vsgXchange REQUIRED)引入导出目标如vsgXchange::vsgXchange。2.5 ⚠️ 已并入核心的模块易踩坑根据旧版文档vsgText与vsgRayTracing曾是独立库但在当前版本它们已并入核心仓库文字渲染 →include/vsg/text/第 17 章光线追踪 →include/vsg/raytracing/进阶因此不要再去find_package(vsgText)——直接#include vsg/text/Text.h即可且无需额外链接。2.6 一条数据的流向你的代码 └─ 构造场景图(Node/Group/Geometry/StateGroup) └─ Viewer::compile() 把场景图编译成 ├─ RenderGraph (渲染通道组织) └─ CommandGraph (命令缓冲录制) └─ 提交到 Vulkan Device → 呈现到 Window组件库如vsgXchange通常在「构造场景图」这一步提供vsg::read()等工厂把文件解析成vsg::Node子树其余流程与核心一致。2.7 小结VSG 一个核心库vsg单 namespace 单 CMake targetvsg::vsg若干外部组件库核心代码按nodes / state / commands / app / io / …子模块目录组织职责清晰vsgText、vsgRayTracing已并入核心无需单独安装真正外挂的是vsgXchange / vsgImGui / vsgQt / vsgUnity等。2.8 延伸阅读与下一章预告第 3 章《开发环境搭建》从零编译安装 VSG 与组件库第 5 章《第一个 VSG 程序》亲手把上面的「数据流向」跑一遍第 2.3 节的目录树是后续每章的「地图」——遇到不熟悉的类先想它属于哪个子模块。
返回列表