news 2026/8/10 9:15:40

VulkanSceneGraph学习教程(二)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VulkanSceneGraph学习教程(二)

第 2 章 VSG 整体架构概览

本章定位:建立「模块 → 职责」的地图,知道每类功能该去哪个目录/哪个库找。后续章节会逐个深入。


2.1 本章目标

  • 理解 VSG 的「单一核心库 + 外部组件库」分层;
  • 认识核心库vsg的子模块目录及其职责;
  • 分清哪些能力已并入核心、哪些需要额外安装组件库。

2.2 前置准备

在深入各模块之前,先通过一张总体框架图建立全局认知。下图展示了 VSG 的整体架构以及核心库与外部组件库之间的协作关系:

图中各模块的关系可概括为:核心库vsg是渲染引擎的主体,其中core提供引用计数与内存管理等基础设施,nodes负责组织场景图,statecommands描述渲染状态与命令录制,app层的Viewer负责把场景图编译并提交到vk封装的 Vulkan 对象,最终呈现到窗口;外部组件库则通过工厂函数(如vsg::read())或集成接口,在场景构建或窗口嵌入等环节与核心库协作。


建议先读完第 1 章,理解 VSG 的设计理念。本章以源码目录(include/vsg/)为线索讲解,可对照本仓库阅读。


2.3 单一核心库vsg

VSG 的核心是一个C++ namespacevsg,对应一个 CMake targetvsg(安装后导出为vsg::vsg)。它不是由多个独立库(如vsgCorevsgPlatform…)组合而成——所有子模块都编译进同一个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 ⚠️ 已并入核心的模块(易踩坑)

根据旧版文档,vsgTextvsgRayTracing曾是独立库,但在当前版本它们已并入核心仓库:

  • 文字渲染 →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 / …子模块目录组织,职责清晰;
  • vsgTextvsgRayTracing已并入核心,无需单独安装;真正外挂的是vsgXchange / vsgImGui / vsgQt / vsgUnity等。

2.8 延伸阅读与下一章预告

  • 第 3 章《开发环境搭建》:从零编译安装 VSG 与组件库;
  • 第 5 章《第一个 VSG 程序》:亲手把上面的「数据流向」跑一遍;
  • 第 2.3 节的目录树是后续每章的「地图」——遇到不熟悉的类,先想它属于哪个子模块。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/10 9:10:41

蚂蚁百灵Ling-3.0-tiny:2B参数轻量级大模型本地部署与API服务实战

如果你是一名开发者&#xff0c;最近在寻找一个既能在本地运行、又具备足够智能的轻量级大语言模型&#xff0c;那么蚂蚁百灵最新发布的 Ling-3.0-tiny 绝对值得你花十分钟了解一下。 这不仅仅是一个“又一个开源模型”的新闻。它的核心价值在于&#xff0c;用一个极小的模型尺…

作者头像 李华
网站建设 2026/8/10 9:10:17

一级减速器CAD图纸设计规范与核心要点解析

1. 项目概述&#xff1a;一级减速器CAD图纸的核心价值第一次接触机械设计的新手可能不太理解&#xff0c;为什么一套完整的一级减速器CAD图纸在工程领域如此重要。作为机械传动系统中最基础的组成单元&#xff0c;减速器设计质量直接关系到整个设备运行的可靠性和寿命。我经手过…

作者头像 李华
网站建设 2026/8/10 9:09:37

Unity对话系统优化:根治文字模糊与按钮点击失效

1. 项目概述&#xff1a;从“能用”到“好用”的对话系统优化 做Unity项目&#xff0c;尤其是带大量UI交互的RPG、AVG或者手游&#xff0c;对话系统几乎是标配。但不知道你有没有遇到过这种情况&#xff1a;精心设计的对话界面&#xff0c;在某些设备上文字糊成一团&#xff0c…

作者头像 李华
网站建设 2026/8/10 9:07:36

分子动力学模拟:原理、流程与优化实践

1. 分子动力学模拟基础概述 分子动力学&#xff08;Molecular Dynamics, MD&#xff09;模拟是计算化学和计算生物学领域的核心研究方法之一。它通过数值求解牛顿运动方程&#xff0c;模拟原子和分子在特定条件下的运动轨迹&#xff0c;从而研究体系的静态和动态性质。我第一次…

作者头像 李华
网站建设 2026/8/10 9:06:55

深入解析MVCC机制:数据库高并发的核心技术

1. MVCC机制的本质与核心价值MVCC&#xff08;Multi-Version Concurrency Control&#xff09;是数据库系统中实现高并发访问的核心技术之一。我第一次接触这个概念是在处理一个电商平台的库存管理系统时&#xff0c;当时系统在促销活动期间频繁出现"超卖"现象。传统…

作者头像 李华
网站建设 2026/8/10 9:03:34

C# 2019开发ERP系统:核心技术解析与实践

1. 为什么选择C# 2019开发ERP系统&#xff1f;在当今企业数字化转型浪潮中&#xff0c;ERP系统作为核心业务支撑平台&#xff0c;其技术选型直接关系到系统的稳定性、可维护性和扩展性。C# 2019作为微软技术栈中的主力语言&#xff0c;在企业级应用开发领域具有独特优势。首先&…

作者头像 李华