xarray/osgverse

GitHub: xarray/osgverse

基于 OpenSceneGraph 的跨平台完整三维引擎解决方案,支持多种图形 API 后端与 WASM 浏览器渲染。

Stars: 390 | Forks: 72

![Image](https://gitee.com/xarray/osgverse/raw/master/assets/misc/logo.jpg) # 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 和延迟渲染管线 ![Image](https://gitee.com/xarray/osgverse/raw/master/assets/misc/sponza.jpg) * osgVerse_ViewerWASM:使用 WebGL 1.0/2.0 的 PBR 和延迟渲染管线,由 WASM 编译 ![Image](https://gitee.com/xarray/osgverse/raw/master/assets/misc/sponza_wasm.jpg) * osgVerse_JsCallerWASM:使用 WebGL 1.0/2.0 的可脚本化 osgb 渲染,由 WASM 编译 ![Image](https://gitee.com/xarray/osgverse/raw/master/assets/misc/osgb_wasm.jpg) * osgVerse_Test_3DGS:3D Gaussian Splatting 渲染(数据来自 XGrids 官方网站) ![Image](https://gitee.com/xarray/osgverse/raw/master/assets/misc/3dgs_rendering.jpg) * osgVerse_Test_Earth:带有 DEM/DOM 切片、大气和海洋支持的地球渲染 ![Image](https://gitee.com/xarray/osgverse/raw/master/assets/misc/earth_rendering.jpg) #### 依赖 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, 图形渲染, 客户端加密, 逆向工具