xarray/osgverse
GitHub: xarray/osgverse
基于 OpenSceneGraph 的跨平台完整三维引擎解决方案,支持多种图形 API 后端与 WASM 浏览器渲染。
Stars: 390 | Forks: 72

# osgVerse
#### 介绍
osgVerse,一个基于 OpenSceneGraph 的完整 3D 引擎解决方案。
| 操作系统 | 编译器 | 是否支持 | 备注 |
|------------------|------------------------------|--------------------|-------|
| Windows 10-11 | Visual Studio 2017-2022 | :heavy_check_mark: | |
| Windows 10 | Visual Studio 2015 | :heavy_check_mark: | 需要 VS2015 Update-3 |
| Windows 10 | MSYS2 (GCC 10.2) | :heavy_check_mark: | |
| Windows 10 | Intel Compiler 2023 | :heavy_check_mark: | cmake -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icx -GNinja .. |
| Windows 10 UWP | Visual Studio 2017-2022 | :heavy_check_mark: | 需要编译示例应用 |
| Ubuntu 18.04 | GCC 7.5 (或更高版本) | :heavy_check_mark: | |
| Debian 11.7.0 | GCC 10.2 (或更高版本) | :heavy_check_mark: | |
| Kylin v10 | GCC 8.3 (或更高版本) | :heavy_check_mark: | 将 VERSE_FIND_LEGACY_OPENGL 设置为 ON |
| NeoKylin v7 | GCC 8.5 (手动构建) | :heavy_check_mark: | 必须禁用 VERSE_USE_GLIBCXX11_ABI |
| UOS v20 | GCC 8.3 (或更高版本) | :heavy_check_mark: | |
| Mac OS X | 14.4 或更高版本 | :heavy_check_mark: | |
| Android | Android SDK 32 & NDK 27c | :heavy_check_mark: | 需要编译示例应用 |
| IOS | | :soon: | |
| WebAssmebly | Emscripten 3.1.64 (或更高版本) | :heavy_check_mark: | 支持 GLES2 (WebGL1) 和 GLES3 (WebGL2) |
#### 主要功能 (迈向 v1.0 中)
- [x] 支持从 OSG 3.1.1 到最新版本,以及 GLSL 1.2 到 4.6,以适配全球大多数硬件。
- [x] 支持基于 PBR 的渲染和延迟渲染管线,以及实时阴影和延迟光照。
- [x] 支持基于 Bullet3/PhysX 库的物理模拟,以及基于 OZZ 库的角色动画。
- [x] 支持复杂的模型简化、优化和切片,并保存为 OSGB 格式以获得更高的效率。
- [x] 提供数据库插件 (leveldb, mbtiles, odbc),用于从数据库而非本地文件夹读取模型和切片。
- [x] 提供媒体流插件,支持播放 RTSP 并通过 WebRTC / Websockets 进行推流。
- [ ] (部分实现) 提供基于 GPU 的视频解码插件(使用 NVCUVID 或 LibVA),没有 CPU 拷贝开销。
- [x] 提供脚本功能,支持使用 OSGB 序列化进行 Python / JsonRPC 脚本编写。
- [x] 支持 GL3 Core profile、GLES2 和 GLES3。同时也支持 Google Angle,用于桥接 Vulkan 和 DirectX 等底层 API。
- [x] 支持 3D Gaussian Splatting 渲染及相关格式:PLY, SPZ, SPLAT, PlayCanvas SOG 和 XGrids LCC。
- [x] 支持无依赖的地球场景构建和高质量的地形/大气/海洋渲染。(无需 osgEarth)
- [ ] (部分实现) 支持主流的桌面和移动操作系统,包括 Windows, Linux, Mac OSX, Android 和 IOS。
- [x] 支持带有 GPU 支持的主流嵌入式设备,包括 ARM 和 RISC-V。
- [x] 支持 Emscripten / WASM 编译,并兼容基于 WebGL 1/2 的浏览器。
- [ ] 提供初步的可视化场景编辑工具,可与著名的 Unity Editor 相媲美。
#### 截图
* osgVerse_Viewer:使用 Desktop GL 的 PBR 和延迟渲染管线

* osgVerse_ViewerWASM:使用 WebGL 1.0/2.0 的 PBR 和延迟渲染管线,由 WASM 编译

* osgVerse_JsCallerWASM:使用 WebGL 1.0/2.0 的可脚本化 osgb 渲染,由 WASM 编译

* osgVerse_Test_3DGS:3D Gaussian Splatting 渲染(数据来自 XGrids 官方网站)

* osgVerse_Test_Earth:带有 DEM/DOM 切片、大气和海洋支持的地球渲染

#### 依赖
1. 请使用 CMake 3.0 或更高版本。(https://cmake.org/download/)
2. 请使用至少支持 C++ 14 的 C++ 编译器。
3. 构建 osgVerse 始终需要 OpenSceneGraph。(https://github.com/openscenegraph/OpenSceneGraph) 当前项目主要依赖于 OSG 3.7.0,但也可以在 OSG 3.1.1 或更高版本上编译。
4. 重要(但可选)的依赖项:
- 4.1 SDL2 (https://github.com/libsdl-org/SDL):用于 Android、IOS 和 WebAssembly 构建的窗口系统支持。
- 4.2 Google Angle (https://github.com/google/angle):用于跨图形 API 的使用和 Vulkan 集成。
- 4.3 EmscriptenSDK (https://emscripten.org/docs/getting_started/downloads.html):用于 WebAssembly 构建。
- 4.4 NVIDIA CUDA (https://developer.nvidia.com/cuda-downloads):用于 CUDA 相关功能。
- 对于摩尔线程设备且设置 VERSE_USE_MTT_DRIVER=ON,无需额外操作即可将 CUDA 替换为 MUSA。
5. 可选的外部依赖:
- 5.1 osgEarth 2.10.1 或更高版本,用于与地球相关的应用和示例。(https://github.com/gwaldron/osgearth)
- 5.2 Bullet 3.17 或更高版本,用于 osgVerseAnimation 模块及相关示例中的物理支持。(https://github.com/bulletphysics/bullet3)。在编译 Bullet 时,请记得启用 INSTALLLIBS(以便正确安装)和 USE_MSVC_RUNTIME_LIBRARY_DLL(用于 /MD 选项)。
- 5.3 Entwine 2.0 或更高版本,用于构建 EPT 点云八叉树。(https://github.com/connormanning/entwine)
- 5.4 Qt 5.5 或更高版本,用于 Qt 相关应用和示例。(https://www.qt.io/licensing/open-source-lgpl-obligations)
- 5.5 ZLMediaKit (git 版本),用于媒体流插件。(https://github.com/ZLMediaKit/ZLMediaKit) 编译时请记得取消勾选 ENABLE_MSVC_MT 选项。要编码为 H264 帧并拉取到媒体服务器,您可能还需要勾选 ENABLE_X264 并将 x264 (http://www.videolan.org/developers/x264.html) 添加到 ZLMediaKit 中。
- 5.6 OpenVDB 10.0 或更高版本,用于 VDB 点云和 3D 图像读写插件。(https://github.com/AcademySoftwareFoundation/openvdb)
- 5.7 libDraco 1.5 或更高版本,用于 osgVerseReaderWriter 库中的 Draco 网格压缩支持。(https://github.com/google/draco)
- 5.8 libIGL 2.5 或更高版本,用于 osgModeling 库中的 Quadriflow、ManifoldPlus 及其他功能。(https://github.com/libigl/libigl)
- 5.9 cinolib 1.0 或更高版本,用于 osgModeling 库中的 Mesh Boolean 及其他功能。(https://github.com/mlivesu/cinolib)
- 5.10 Vulkan 1.3 或更高版本,用于基于 Google Angle 的跨图形 API 的 Vulkan 扩展。(https://vulkan.lunarg.com/sdk/home)
- 5.11 Effekseer 1.70 或更高版本,用于 osgVerseAnimation 模块及相关示例中的粒子支持。编译时请记得勾选 USE_MSVC_RUNTIME_LIBRARY_DLL 选项。(https://github.com/effekseer/Effekseer)
- 5.12 libCEF 127.3 或更高版本,用于 osgVerseAnimation 模块及相关示例中的 HTML5/CSS 页面渲染支持。(二进制下载:https://cef-builds.spotifycdn.com/index.html)
- 5.13 mimalloc 2.17 或更高版本,用于具备卓越性能的通用内存分配器。(https://github.com/microsoft/mimalloc)
- 5.14 NVIDIA Video Codec SDK 12 或更高版本,用于基于 codec_nv 插件的视频解码/编码。(https://developer.nvidia.com/video-codec-sdk)
- 5.15 netCDF-C 4.9.3 或更高版本,用于 NetCDF/HDF 数据读取插件。(https://github.com/Unidata/netcdf-c)
- 5.16 FFmpeg 6.0 或更高版本,用于视频解析和基于 CPU 的解码/编码。(https://github.com/FFmpeg/FFmpeg)
- 5.17 GGML 0.13 或更高版本,用于基于 AI/LLM 的功能,如人体重建。(https://github.com/ggml-org/ggml)
#### 支持的硬件
要使用 osgVerse 库和应用程序,OpenGL 版本必须高于 2.0。核心模式和兼容模式均可正常工作。我们的项目使用 GLSL 功能,支持从 GLSL 120 到最新的 GLSL 版本。
我们的项目已经在以下列出的显卡上进行了测试:
| 显卡 | OpenGL 版本 | 是否支持 | VerseViewer | 备注 |
|---------------------------|----------------|--------------------|-------------|-------|
| NVIDIA RTX 30** 系列 | 4.6 / GLSL 4.6 | :heavy_check_mark: | 60fps | |
| NVIDIA 10** 系列 | 4.6 / GLSL 4.6 | :heavy_check_mark: | 60fps | |
| NVIDIA 1070 (Nouveau) | 4.3 / GLSL 4.3 | :zap: | 60fps | 使用 Nouveau 驱动时显示存在问题 |
| NVIDIA GT720 | 4.6 / GLSL 4.6 | :heavy_check_mark: | < 12fps | |
| NVIDIA Quadro K2200 | 4.6 / GLSL 4.6 | :heavy_check_mark: | 60fps | |
| AMD Radeon RX5500 | 4.6 / GLSL 4.6 | :heavy_check_mark: | 60fps | |
| AMD Radeon (TM) Graphics | 4.6 / GLSL 4.6 | :heavy_check_mark: | < 15fps | |
| Intel UHD Graphics | 4.6 / GLSL 4.6 | :heavy_check_mark: | ~= 30fps | |
| MooreThreads X300 | 4.3 / GLSL 4.3 | :heavy_check_mark: | 60fps | 需要 VERSE_USE_MTT_DRIVER(使用 MUSA 时自动启用) |
| MooreThreads S80/S1000 | 4.1 / GLSL 4.1 | :heavy_check_mark: | ~= 30fps | 需要 VERSE_USE_MTT_DRIVER(使用 MUSA 时自动启用) |
| LISUAN 7G100 | 4.6 / GLSL 4.6 | :heavy_check_mark: | ~= 45fps | |
| XiangDiXian FUXI R2900E | 4.6 / GLSL 4.6 | :heavy_plus_sign: | 60fps | PCF 阴影失败(VSM/ESM 正常) |
| Phytium D3000M (FTG340) | GLES 3.2 | :heavy_plus_sign: | < 10fps | 仅限 GLES;PCF 阴影失败(VSM/ESM 正常) |
| Phytium D2000+X100 | 3.0 / GLSL 3.3 | :heavy_plus_sign: | < 10fps | |
| JingJia Micro JM1 | 3.0 / GLSL 1.3 | :heavy_plus_sign: | < 5fps | 仅限 Core;PCF 阴影失败(VSM/ESM 正常);glBlitFrameBuffer 失败 |
| LJmicro GP201/202 | 4.0 / GLSL 4.0 | :heavy_plus_sign: | < 10fps | glBlitFrameBuffer 失败 |
| Zhaoxin C-960 (SIS) | 3.2 / GLSL 1.5 | :zap: | | 目前在 osg::Texture 中发生段错误 |
| VirtualBox SVGA 3D | 4.1 / GLSL 4.1 | :heavy_check_mark: | 60fps | |
| VirtualBox (仅限 Mesa) | 4.5 / GLSL 4.5 | :heavy_plus_sign: | < 5fps | glBlitFrameBuffer 失败 |
#### 模块
1. osgVerseDependency:包含所有内置的第三方依赖。
2. osgVersePipeline:支持 PBR 材质、实时阴影、延迟光照和特效的现代渲染管线。
3. osgVerseReaderWriter:全面支持 FBX、GLTF 和 KTX 格式的读写器,后续将支持更多格式。
4. osgVerseAnimation:支持基于补间的路径动画、物理模拟、粒子动画和角色动画。
5. osgVerseModeling:模型简化管线、建模操作和计算几何实用工具。
6. osgVerseUI:基于 IMGUI 的快速 UI 支持、基于 HTML 的 UI 解决方案及相关实用工具。
7. osgVerseScript:基于 OSG 序列化功能的脚本支持。目前支持 Python 和 JsonRPC。
8. osgVerseAI:人工智能相关类,包括 navigation-mesh、AI 模型加载等。
9. osgVerseWrappers:osgVerse 及扩展 OSG 类的所有序列化包装器。
10. 敬请期待...
##### 模块依赖链
| 名称 | 依赖的模块 | 可选的外部依赖 |
|--------------|-------------------------------------------|------------------------------|
| Modeling | Dependency | libIGL |
| Pipeline | Dependency, Modeling | CUDA |
| Script | Dependency, Pipeline | |
| AI | Dependency, Modeling | |
| Animation | Dependency, Pipeline, Modeling | Bullet, Effekseer |
| UI | Dependency, Modeling, Script | libCEF |
| ReaderWriter | Dependency, Animation, Modeling, Pipeline | libDraco, SDL |
| Wrappers | ALL | |
#### 应用程序
1. osgVerse_SceneEditor:一个面向未来的 osgVerse 场景和组件编辑器。
2. osgVerse_Viewer:支持现代渲染管线的单相机查看器。
3. osgVerse_ViewerComposite:支持现代渲染管线的多相机(多视图)查看器。
4. osgVerse_ViewerGLES:演示如何将 osgVerse 与 SDL2 集成的示例,主要针对 GLES2/3。
5. osgVerse_EarthViewer:演示如何将 osgVerse 与 osgEarth 集成的示例。
6. osgVerse_QtViewer:演示如何将 osgVerse 与 Qt 集成的示例。
7. osgVerse_ViewerWASM (wasm/pbr_demo):WASM 示例,支持现代渲染管线。
8. osgVerse_JsCallerWASM (wasm/script_demo):WASM 示例,演示如何在 JS 中使用 OSGB 脚本。
9. 敬请期待...
#### 示例和测试
1. osgVerse_Test_Plugins:用于快速展示插件库依赖项的实用工具。(待办:显示依赖和缺失的 dll)
2. osgVerse_Test_Pipeline:用于简单场景和 osgVerse 管线兼容性测试的示例程序。
3. osgVerse_Test_Report_Graph:用于详细显示场景图信息的实用工具。
4. osgVerse_Test_Shader_Library:演示如何在 OSG 程序中使用着色器库的示例。
5. osgVerse_Test_Shadow:用于阴影算法调试和优化的示例。
6. osgVerse_Test_Forward_Pbr:演示单前向通道中 PBR 渲染的示例。
7. osgVerse_Test_ImGui:演示在 osg 场景中使用 IMGUI 的示例。(待办:多视图 IMGUI 用法)
8. osgVerse_Test_Media_Stream:媒体流/像素流示例,包括服务器端和推流器实现。(待办:切换拉流器/播放器)
9. osgVerse_Test_Pbr_Prerequisite:用于预计算全局 PBR 纹理并将其保存到 IBL osgb 文件的实用工具。
10. osgVerse_Test_Paging_Lod:用于分页 LOD 文件组合、优化和传输到 levelDB 的实用工具。
11. osgVerse_Test_Point_Cloud:用于点云查看和操作的示例。(待办:eye-dome 渲染)
12. osgVerse_Test_Player_Animation:角色动画加载和播放的示例。(待办:简单 UI)
13. osgVerse_Test_Symbols:使用 Blend2D 绘制并展示带有图标和文本的大量符号的示例。
14. osgVerse_Test_Tween_Animation:演示补间动画的示例,如路径和数据驱动动画。(待办:超时事件)
15. osgVerse_Test_Polygon2D:演示 2D 多边形操作的示例。(待办:标注、样条线使用、加载 MVT)
16. osgVerse_Test_Mesh_Process:演示 3D 网格操作的示例。(待办:标注、拓扑、NURBS、常见形状)
17. osgVerse_Test_Navigation:演示基于导航网格的寻路示例。(待办:简单 UI)
18. osgVerse_Test_Physics_Basic:支持刚体和运动学的物理世界示例,需要 Bullet3。
19. osgVerse_Test_Particle_U3D:类似于 Unity 的粒子系统示例。(待办:更好的火焰/爆炸示例)
20. osgVerse_Test_Particle_Effekseer:使用 Effekseer 的另一个粒子系统示例。(待办:Effekseer 脚本)
21. osgVerse_Test_Scripting:基于 OSGB 序列化格式实现脚本编写的示例。
22. osgVerse_Test_Video:使用多个插件进行视频解复用、解码和播放的示例。
##### 特定目标的测试
1. osgVerse_Test_Compressing:KTX 纹理压缩 (DXT / ETC) 和 Draco 几何压缩测试。
2. osgVerse_Test_Thread:在 osgViewer 中使用 Marl 线程任务调度器的测试。
3. osgVerse_Test_Volume_Rendering:体绘制实现不同方法的测试。
4. osgVerse_Test_Instance_Param:对比纹理 LUT 和顶点属性除数使用的测试。
5. osgVerse_Test_Auto_LOD:GeometryMerger 用法测试:组合 / indirect / octree。
6. osgVerse_Test_Sky_Box:可变天空盒和大气散射的测试。
7. osgVerse_Test_Restful_Server:基于 libhv 的 Restful HTTP API 测试。
8. 已弃用的测试:
- osgVerse_Test_FastRtt:使用新引入的 RTT 绘制回调的快速测试。
- osgVerse_Test_Obb_KDop:创建模型 obb/kdop 包围盒的快速测试。
- osgVerse_Test_CubeRtt:渲染到立方体贴图(6 个面)演示的快速测试。
- osgVerse_Test_Mesh_Boolean:使用自定义方法进行网格切割的快速测试。
- osgVerse_Test_Auto_Imposter:将模型转换为十字公告板的快速测试
- osgVerse_Test_Texture_Mapping:GLSL 纹理三映射实现的测试。
- osgVerse_Test_Indirect_Draw:演示如何使用 OpenGL 4.x 间接绘制的示例程序。
- osgVerse_Test_Tesselation:演示如何使用 OpenGL 4.x 曲面细分着色器的示例程序。
- osgVerse_Test_MultiView_Shader:使用几何着色器实现多视图渲染的测试。
#### OSG 风格插件
1. osgdb_verse_ept:基于 Entwine 的海量点云插件,并对其进行分页渲染。
2. osgdb_verse_fbx:全面支持 FBX 格式的插件。
3. osgdb_verse_gltf:全面支持 GLTF 和 GLB 格式的插件。
4. osgdb_verse_web:支持 HTTP 和更多 Web 协议的插件,可能会替代 curl 插件。
5. osgdb_verse_image:用于读取常见图像格式(如 JPEG 和 PNG)的插件。它主要用于 WASM 场景。
6. osgdb_verse_ktx:用于读写 KTX/BasisU 图像格式的插件。它可以作为 GLTF/3dtiles 扩展使用。
7. osgdb_verse_webp:用于读取 WEBP 格式的插件。它可以作为 GLTF/3dtiles 扩展使用。
8. osgdb_verse_tiff:用于读取 TIFF 和 3D TIFF 图像(实验性)的插件。
9. osgdb_verse_leveldb:用于从 LevelDB 数据库读写的插件。
10. osgdb_verse_mbtiles:使用 MBTiles 规范从 Sqlite 数据库读写的插件。
11. osgdb_verse_tiles:用于读取 Cesium 3dtiles (tileset.json) 和 Osgb 文件 (metadata.xml,或者直接是根文件夹) 的插件。
12. osgdb_verse_ms:用于读写流媒体协议(如 RTSP/RTMP/WebRTC)的插件。
13. osgdb_verse_tms:从 TMS 地理服务器读取切片并支持分页 LOD 渲染的插件。
14. osgdb_verse_netcdf:读取 NetCDF 和 HDF5 文件并尝试从中解析图像数据的插件。
15. osgdb_verse_3dgs:读取 3D Gaussian Splatting 数据(.ply, .splat 和 .spz)进行渲染的插件。
16. osgdb_verse_mvt:读取 Mapbox Vector Tiles (.mvt / .pbf) 几何数据的插件。
17. osgdb_verse_geojson:读取 Mapbox GeoJSON (.json) 几何数据的插件。
18. osgdb_verse_vdb:读取 OpenVDB 点群体素并将其渲染为点云或 3D 图像的插件。
19. osgdb_verse_ffmpeg:使用 FFmpeg 进行视频解码/编码的插件(增强以与 codec_nv 连接)。
20. osgdb_verse_terrain:用于读取 Cesium 地形(quantized-mesh 格式)的插件。
21. osgdb_codec_nv:提供基于 CUDA 的视频解码/编码支持,并连接到解复用器/复用器和播放器的插件。
22. osgdb_pbrlayout:用于更改 PBR 纹理布局至 osgVerse 标准的伪插件。它支持以下选项:
- Diffuse (D), Specular (S), Normal (N), Metallic (M), Roughness (R), Occlusion (O), Emissive (E), Ambient (A), Omitted (X)
- 每个源纹理由一个选项字符和一个通道号(1-4)定义,并以 ',' 分隔。
- 输入示例:model.fbx.D4,M1R1X2,N3.pbrlayout(Tex0 = Diffuse x 4, Tex1 = Metallic+Roughness, Tex2 = Normal)
- 所有布局都将转换为 osgVerse 标准:D4,N3,S4,O1R1M1,A3,E3
20. 敬请期待...
#### 资源
1. models:用于测试的 3D 模型,主要为 GLTF 格式。
2. shaders:用于 osgVerse 渲染管线的着色器。
3. skyboxes:用于测试的天空盒,可以是一张 HDR 图像或 6 个立方体贴图。
4. misc:中文输入法词库文件、字体文件、截图……
5. tests:一些测试数据
#### 准备并编译第三方库
1. 默认情况下,osgVerse 会寻找以下第三方库:
- OpenGL:来自系统。请注意,某些 Linux 发行版(如麒麟)应首先启用 VERSE_FIND_LEGACY_OPENGL。
- OpenSceneGraph:来自环境变量 $OSG_ROOT。
- SDL, Draco, Bullet 等:来自 CMake 变量 ${VERSE_3RDPARTY_PATH},默认情况下为 ``/../Dependencies。
- 实际查找头文件和库的路径将自动设置为 '${VERSE_3RDPARTY_PATH}/``'。
- 对于 x86/x64 构建:`` 为 'x86_64'、'x64' 或 'x86'。
- 对于 Android 构建:`` 为 'android'。
- 对于 MacOSX/IOS 构建:`` 为 'apple' 或 'ios'。
- 对于 WebAssembly (WASM) 构建:`` 为 'wasm' 或 'wasm64'。
- 对于 Windows UWP 构建:`` 为 'uwp'。
- 对于 ARM64 构建:`` 为 'aarch64'。
2. 编译 Draco:
- 从 https://github.com/google/draco.git 克隆
- 对于 WebAssembly (WASM):
- $ export EMSCRIPTEN=``/upstream/emscripten
- $ cmake -DCMAKE_TOOLCHAIN_FILEEMSCRIPTEN/cmake/Modules/Platform/Emscripten.cmake -DDRACO_WASM=ON
-DDRACO_JS_GLUE=OFF -DCMAKE_INSTALL_PREFIX=``/Dependencies/wasm ``
- $ make install
- 对于常见平台:
- (Windows) $ make -DCMAKE_INSTALL_PREFIX=``/Dependencies/`` `` & make install
- (Linux) $ apt-get install libdraco-dev
3. 编译 ZLMediaKit:
- 准备相关的依赖项:
- FFmpeg/x264:
- (Windows) 从 https://github.com/ShiftMediaProject/FFmpeg/releases 下载
和 https://github.com/ShiftMediaProject/x264/releases
- (Linux) $ apt-get install libavdevice-dev libavformat-dev libavutil-dev libavcodec-dev
libswscale-dev libswresample-dev libx264-dev
- OpenSSL:(Linux) $ apt-get install libcrypto++-dev libssl-dev
- libFAAC:(Linux) $ apt-get install libfaac-dev
- libSCTP:(Linux) $ apt-get install libusrsctp-dev
- libSRTP:(Linux) $ apt-get install libsrtp2-dev
- 从 https://github.com/ZLMediaKit/ZLMediaKit.git 递归克隆
- $ cmake -DENABLE_API=ON -DENABLE_CXX_API=ON -DENABLE_FFMPEG=ON -DENABLE_OPENSSL=ON -DENABLE_SCTP=ON
-DENABLE_SERVER=ON -DENABLE_WEBRTC=ON -DENABLE_X264=ON
-DCMAKE_INSTALL_PREFIX=``/Dependencies/`` ``
- 您可能需要在 cmake-gui 中手动指定一些库路径
- $ make install
4. 编译 Bullet3:
- 从 https://github.com/bulletphysics/bullet3.git 克隆
- $ cmake -DINSTALL_LIBS=ON -DUSE_DOUBLE_PRECISION=ON
-DCMAKE_INSTALL_PREFIX=``/Dependencies/`` ``
- $ make install
5. 敬请期待...
#### 通过源码编译 osgverse(使用 shell 脚本)
0. 假设 osgVerse 源代码已经位于 ``。
1. Linux 主机
- 在终端运行以下命令:
- $ cd ``
- $ ./Setup.sh ``
- OSG 源代码将被自动下载并放置在 ../OpenSceneGraph
- 从菜单中进行选择并开始编译所有库:
- `<0>`:OpenGL Compatible profile
- 结果将保存在 `/build/sdk`
- `<1>`:OpenGL Core profile
- 结果将保存在 `/build/sdk_core`
- `<2>`:OpenGL ES
- `` 必须设置为 libEGL.so 和 libGLESv2.so 的路径,例如 `/usr/lib/x86_64-linux-gnu`
- 您可以在接下来的步骤中选择构建 GLES2 或 GLES3。
- 结果将保存在 `/build/sdk_es`
- `<3>` 或 `<4>`:WebAssembly 1 或 2
- `` 必须设置为 Emscripten SDK 的路径。
- 您可以在接下来的步骤中选择构建 WASM64。
- 有关 osgEarth 相关依赖的更多信息,请参见下文。
- 结果将保存在 `/build/verse_wasm` 或 `/build/verse_wasm2`
- `<5>`:Android GLES3
- 必须先安装 Java SDK 和 Gradle。
- 必须设置环境变量 ANDROID_SDK 和 ANDROID_NDK。
2. Windows 主机
- 运行 Visual Studio 命令行提示符 (x64) 以确保可以找到 NMake。
- 运行以下命令:
- $ cd ``
- $ Setup.bat ``
- 查看以获取更多详细信息
#### 通过源码编译 osgverse(传统方式)
0. 假设 osgVerse 源代码已经位于 ``。
1. 桌面版 Windows / Linux
- 确保您拥有编译器环境(如 Visual Studio)。
- 下载并安装 CMake 工具。
- 下载 OSG 预编译库或从源代码编译,解压至 ``。
- 声明一个环境变量 OSG_ROOT,用于指示 OSG 根目录:
- (Windows) $ set OSG_ROOT=``
- (Linux) $ export OSG_ROOT=``
- 在终端运行以下命令:
- $ cd ``
- $ mkdir build
- $ cd build
- $ cmake ..
- $ cmake --build .
- 您也可以选择使用 cmake-gui 并在 GUI 模式下设置 OSG 相关选项。
- 对于 MinGW 构建 (UCRT64):
- 首先下载 OpenSceneGraph 预编译库:
- $ pacman -S mingw-w64-ucrt-x86_64-OpenSceneGraph
- 在终端运行以下命令:
- $ cmake -G "MSYS Makefiles" ``
- 对于 UWP 构建:
- 首先下载 Windows Store SDK 或最新的 Windows 11 SDK(随 VS2022 提供)。
- 下载适用于 UWP 的 Angle:https://www.nuget.org/packages/ANGLE.WindowsStore
- 将 .nuget 文件重命名为 .zip 并解压。在其中找到库文件和头文件。
- 编译适用于 GLES2/GLES3 的 OSG(Desktop / GoogleAngle)。详见 herlps/osg_builder/README.md。
- 在终端运行以下命令:
- $ cmake -G "Visual Studio 17 2022" -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0" ``
2. 桌面版 Mac OSX
- 首先准备 Ninja、Python3 和 CMake。(在 MacOSX 上通过 Homebrew 获取)
- 按照 helpers/osg_builder/README.md 中的说明下载并编译 GoogleAngle
- 使用 -DOPENGL_PROFILE=GLES3 配置 OpenSceneGraph
- 配置 osgverse 以使用特定版本的 OpenSceneGraph,并将 GoogleAngle 作为桥接
3. Android
- 从以下地址下载 OpenJDK 17:https://jdk.java.net/archive/
- 解压并将 JAVA_HOME 变量设置为 ``
- 从以下地址下载 Android 命令行工具:https://developer.android.com/studio#command-line-tools-only
- 按照说明安装 SDK:https://developer.android.com/tools/sdkmanager
- $ ``/bin/sdkmanager "platform-tools" "platforms;android-32"
- 从以下地址下载 Android NDK:https://developer.android.com/ndk/downloads/
- 下载 Gradle 并将 ``/bin 添加到 PATH:https://gradle.org/releases/
- 在 Windows 下,在终端运行以下命令:
- $ cd ``
- $ ./Setup.bat
- 选择 "5. Android / GLES3" 并开始构建。注意:如有需要,将重新生成 local.properties 和 settings.gradle。
- 敬请期待...
4. HarmonyOS
- 从以下地址下载 OpenJDK 17:https://jdk.java.net/archive/
- 解压并将 JAVA_HOME 变量设置为 ``
- 从以下地址下载命令行工具:https://developer.huawei.com/consumer/cn/download/
- 敬请期待...
5. IOS
- 敬请期待...
6. WebAssembly
- 从 https://emscripten.org/docs/getting_started/downloads.html 下载 emsdk,解压至 ``。
- 根据上述页面的要求更新并激活 emsdk。
- 下载 OSG 源代码并解压至 ``/../OpenSceneGraph
- (可选)下载 osgEarth-WASM 源代码并解压至 ``/../osgearth-wasm
- 仓库:https://gitee.com/xarray/osgearth-wasm
- osgEarth-WASM 只能在 WebGL 2.0 下构建
- 构建 GDAL、GEOS 等 (https://github.com/bugra9/gdal3.js)
- 修改 GDAL_EMCC_FLAGS.mk 以在标志中添加 '-pthread'
- $ sudo apt install automake sqlite3
- $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
- $ nvm install node
- $ npm install -g pnpm@8.0
- $ source ``/emsdk_env.sh
- $ pnpm install
- $ pnpm run build
- 将 bin/include/lib/share 从 gdal3.js\build\native\usr 复制到 ``/../Dependencies/wasm
- 在带有 Ninja 的 Windows 下:
- 在终端运行以下命令:
- $ ``/emsdk_env.bat
- $ cd ``
- $ ./Setup.bat
- 在 Linux 或 WSL (Windows Sub-System for Linux) 下:
- 启动 UNIX 终端(在 Windows 下,请安装 WSL v1 并启动它)。
- 在终端运行以下命令:
- $ cd ``
- $ ./Setup.sh ``
- 选择 "3. WASM / WebGL 1.0" 或 "4. WASM / WebGL 2.0" 并开始在 ``/build/verse_wasm 构建 WASM。
- 在 ``/build/verse_wasm/bin 启动 HTTPS 服务器。以 ``/wasm/run_webserver.py 为例。
- 将 ``/assets 复制到服务器的同一根目录下,尽情体验我们的 WebGL 示例吧。
#### CMake 选项
| 选项 | 类型 | 默认值 | 备注 |
|-----------------------------|---------|---------------|-------|
| OSG_INCLUDE_DIR | Path | | (必需) 设置为 osg/Node 的路径 |
| OSG_BUILD_INCLUDE_DIR | Path | | (必需) 设置为 osg/Version 的路径 |
| OSG_LIB_DIR | Path | | (必需) 设置为 libosg.a 或 osg.lib 的路径 |
| OSG_DEBUG_POSTFIX | String | d | 为 OSG 调试版构建库设置一个后缀 |
| OSG_GLES_INCLUDE_DIR | Path | | 设置为 GLES2/gl2.h 或 GLES3/gl3.h 的路径,仅用于 GLES 构建 |
| OSG_GLES_LIBRARY | Path | | 设置为 libGLESv2.so 或 libGLESv2.lib 的路径,仅用于 GLES 构建 |
| OSG_EGL_LIBRARY | Path | | 设置为 libEGL.so 或 libEGL.lib 的路径,仅用于 GLES 构建 |
| BULLET_INCLUDE_DIR | Path | | 设置为 btBulletDynamicsCommon.h 的路径 |
| BULLET_LIB_DIR | Path | | 设置为 libBulletDynamics.a 或 BulletDynamics.lib 的路径 |
| BULLET_DEBUG_POSTFIX | String | _Debug | 为 Bullet 调试版构建库设置一个后缀 |
| DRACO_INCLUDE_DIR | Path | | 设置为 draco/draco_features.h 的路径 |
| DRACO_LIB_DIR | Path | | 设置为 libdraco.a 或 draco.lib 的路径 |
| LIBIGL_INCLUDE_DIR | Path | | 设置为 igl/igl_inline.h 的路径 |
| ZLMEDIAKIT_INCLUDE_DIR | Path | | 设置为 mk_common.h 的路径 |
| ZLMEDIAKIT_LIB_DIR | Path | | 设置为 libmk_api.so 或 mk_api.lib 的路径 |
| OPENVDB_INCLUDE_DIR | Path | | 设置为 openvdb/openvdb.h 的路径 |
| OPENVDB_BOOST_INCLUDE_DIR | Path | | 设置为 boost/type.hpp 的路径 |
| OPENVDB_TBB_INCLUDE_DIR | Path | | 设置为 tbb/blocked_range.h 的路径 |
| OPENVDB_LIB_DIR | Path | | 设置为 libopenvdb.so 或 openvdb.lib 的路径 |
| OPENVDB_TBB_LIB_DIR | Path | | 设置为 libtbb.so 或 tbb.lib 的路径 |
| OSGEARTH_INCLUDE_DIR | Path | | 设置为 osgEarth/EarthManipulator 的路径 |
| OSGEARTH_BUILD_INCLUDE_DIR | Path | | 设置为 osgEarth/BuildConfig 的路径 |
| OSGEARTH_LIB_DIR | Path | | 设置为 libosgEarth.so 或 osgEarth.lib 的路径 |
| SDL2_INCLUDE_DIR | Path | | 设置为 SDL.h 的路径 |
| SDL2_LIB_DIR | Path | | 设置为 libSDL2.so 或 SDL2.lib 的路径 |
| Qt5_DIR | Path | | 设置为 ``/lib/cmake/Qt5 的路径 |
| Qt6_DIR | Path | | 设置为 ``/lib/cmake/Qt6 的路径 |
| VERSE_3RDPARTY_PATH | Path | | 设置为第三方的路径 |
| VERSE_INSTALL_PDB_FILES | Boolean | ON | 启用以随可执行文件和动态库安装 PDB 文件 |
| VERSE_BUILD_EXPORTERS | Boolean | OFF | 启用构建其他软件(例如 3dsmax)的导出器 |
| VERSE_BUILD_3RDPARTIES | Boolean | ON | 启用构建常见库,如 FreeType、Jpeg 和 PNG |
| VERSE_BUILD_WITH_QT | Boolean | OFF | 启用构建基于 Qt 的应用程序和测试 |
| VERSE_BUILD_DEPRECATED_TESTS| Boolean | OFF | 启用构建已弃用的测试 |
| VERSE_NO_SIMD_FEATURES | Boolean | OFF | 启用以忽略所有 SIMD 特性(当遇到编译错误时) |
| VERSE_SUPPORT_CPP17 | Boolean | OFF | 启用构建使用 C++ 17 标准的库 |
| VERSE_STATIC_BUILD | Boolean | OFF | 启用 osgVerse 的静态构建 |
| VERSE_USE_OSG_STATIC | Boolean | OFF | 使用 OpenSceneGraph 的静态构建(将强制 osgVerse 为静态) |
| VERSE_USE_DWARF | Boolean | OFF | 启用详细的调试信息和符号。必须安装 'libdw-dev' |
| VERSE_USE_GLIBCXX11_ABI | Boolean | ON | 启用以使用 GCC 4.9 以上编译器构建的库 |
| VERSE_USE_MIMALLOC | Boolean | ON | 如果找到 mimalloc,此选项用于改善内存分配 |
| VERSE_USE_MTT_DRIVER | Boolean | OFF | 启用以正确使用摩尔线程 MTT 驱动程序 |
| VERSE_USE_FORCED_MULTIPLE | Boolean | OFF | 启用以解决在 MSVC 下编译 OSG 3.2 及更低版本时的 LNK2005 问题 |
| VERSE_WASM_USE_PTHREAD | Boolean | ON | 为 WASM 启用 Pthread,这需要在服务器端配置 COOP / COEP,仅限 WASM 构建 |
| VERSE_WASM_OPTIMIZE_SIZE | Boolean | OFF | 为 WASM 启用 -O3,这速度较慢但生成的代码体积更小 |
| VERSE_FIND_LEGACY_OPENGL | Boolean | OFF | 启用以使用传统模式搜索 OpenGL 库,适用于某些 Linux 系统,如麒麟 |
标签:3D引擎, Bash脚本, OpenSceneGraph, Vectored Exception Handling, WebAssembly, 图形渲染, 客户端加密, 逆向工具