一、📌 引言

在使用 3D Gaussian Splatting(3DGS)进行三维重建和可视化的过程,SIBR_gaussianViewer_app 是一款官方推荐的本地可视化工具,允许我们在 GPU 上实时浏览重建结果。然而,许多用户在启动该工具时,会遇到如下报错:
在这里插入图片描述
而且可视化界面会闪退,该错误虽简单,却阻碍了整个可视化流程的展开。本文将基于实际案例,详细解析错误成因,并提供一个无需改代码即可成功运行的实战级解决方案

二、🧠 报错溯源分析

运行如下命令:

./SIBR_gaussianViewer_app -m /home/sunshine/Project/darkgs/output/7a0f12c0-7

出现日志信息:

[SIBR] ##  ERROR  ##:   FILE .../Utils.cppLINE 82, FUNC loadFileFile not found: uv_mesh.vert
terminate called after throwing an instance of 'std::runtime_error'

这表明程序在尝试加载 GLSL 着色器 uv_mesh.vert 文件时失败,触发异常崩溃。
在日志中,我们可以看到以下关键线索:
正确加载了 COLMAP 的 SfM 数据(例如 points3D.bin);
成功读取了高斯点(193073 个);
初始化 OpenGL 过程也未报错;
最后失败点为:尝试加载 uv_mesh.vert 着色器失败,触发 C++ 层的异常,导致程序崩溃。
这一错误本质上是 SIBR 框架依赖某些 GLSL 着色器文件未找到,其核心由如下函数触发:

std::string loadFile(const std::string &filename) {std::ifstream file(filename);if (!file.is_open())throw std::runtime_error("File not found: " + filename);...
}

三、🎯根本原因分析

SIBR 使用 OpenGL 渲染高斯点云时,需要加载多个着色器文件(例如 .vert, .frag 等),但程序使用的是 相对路径加载资源文件,默认在可执行文件当前路径下寻找 shaders/core/uv_mesh.vert。

因此,如果你直接在 install/bin/ 下运行程序,而当前路径下没有 shaders/ 文件夹或着色器文件,就会导致加载失败。

四、✅解决方案

SIBR_gaussianViewer_app 在加载 shader 时 直接从“当前工作目录”拿裸文件名,不会去读 SIBR_PATH。
所以只要执行时所在的目录里没有 uv_mesh.vert 就会崩溃 —— 环境变量已经对,但程序根本没去用它。
官方 issue #508 给的办法:
让 工作目录 指向 shader 文件夹,或把 shader 扔到可执行旁边。

# 进入 shader 目录当工作目录
cd ~/Project/darkgs/SIBR_viewers/install/shaders/core# 从这里启动 Viewer(相对路径回到 bin)
../../../bin/SIBR_gaussianViewer_app \-m /home/sunshine/Project/darkgs/output/RNN-0.1路径解释:
../../../ = 从 shaders/core → shaders → install → bin。

在这里插入图片描述
执行完毕就可以正常可视化了!

五、✅ 方案 A:建立软链接其他方案可选(便于后续使用)

方案 A:建立软链接

ln -s ~/Project/darkgs/SIBR_viewers/install/shaders ~/Project/darkgs/SIBR_viewers/install/bin/shaders
cd ~/Project/darkgs/SIBR_viewers/install/bin
./SIBR_gaussianViewer_app -m ...

方案 B:设置环境变量(部分版本支持)

export SIBR_RESOURCE_PATH=~/Project/darkgs/SIBR_viewers/install/shaders
./SIBR_gaussianViewer_app -m ...

SIBR 在某些版本中支持通过该变量设置资源路径,适用于自动化脚本运行场景。

六、总结与建议

一句话总结: 该报错并非缺少文件,而是路径未对齐,调整运行目录即可解决。

📌 核心结论:

报错 uv_mesh.vert 缺失源于路径问题;
推荐在包含 shaders/core/ 的目录中运行程序;
也可通过软链接或环境变量方式规避路径问题。

🛠 建议:

可写入一个运行脚本 run_viewer.sh,自动设置路径;
若部署跨设备使用,务必将 shaders/ 文件夹随模型一同打包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/79686.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/79686.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/79686.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell_plus

python manage.py shell_plus 是由 django-extensions 提供的一个增强版的 Django shell,它自动导入你的所有模型和其他一些便捷功能,使得交互式开发更加方便。 如果你遇到配置或运行问题,特别是与 RQ_SHOW_ADMIN_LINK 相关的 ImproperlyCon…

文章记单词 | 第62篇(六级)

一,单词释义 noon [nuːn] n. 中午,正午clothes [kləʊz] n. 衣服,衣物reward [rɪˈwɔːd] n. 报酬,奖赏;vt. 奖励,奖赏newly [ˈnjuːli] adv. 最近,新近;以新的方式premier [ˈ…

Linux watch 命令使用详解

简介 watch 命令会以固定间隔(默认每 2 秒)重复运行给定命令,并在终端上显示其输出。它非常适合监控不断变化的输出,例如磁盘使用情况、内存使用情况、文件更改、服务状态等。 基础语法 watch [options] command常用选项 -n, -…

C++类_成员函数指针

在 C11 里,成员函数指针是一种特殊的指针,它指向类的成员函数。下面详细介绍成员函数指针的定义、使用及注意事项。 定义 成员函数指针的定义格式如下: 返回类型 (类名::*指针名)(参数列表);例如: class MyClass { public:voi…

qmt下载的数据放在了哪里了?

#qmt获取日线数据 from xtquant import xtdata # 设置股票代码列表和时间范围 stock_list xtdata.get_stock_list_in_sector(沪深A股) # print("获取到的股票列表:", stock_list,len(stock_list)) start_time 20240501 end_time 20250501# 下载多只股票…

深入浅出数据库管理系统

数据库管理系统:数字世界的“隐形管家” ——从数据杂乱到井井有条的秘密武器 一、数据库管理系统:数字世界的“隐形管家” 你有没有想过,为什么我们在电商平台购物时,商品库存能实时更新?为什么银行转账时&#xff…

关于Docker拉取镜像超时/无法访问镜像仓库解决方案

文章目录 关于Docker拉取镜像超时/无法访问镜像仓库解决方案卸载原先安装的Docker及相关配置使用代理后无法拉取镜像解决方案验证代理连通性安装 Docker 最新版配置 Docker Daemon HTTP 代理重启验证与拉取镜像 不使用代理解决方案安装 Docker 最新版配置阿里云容器镜像加速 关…

Docker Compose:服务编排:批量管理多个容器

通过docker compose进行容器批量管理:一次性启动四个容器(nginx,tomcat,redis,mysql) (1) 创建docker-compose目录 mkdir ~/docker-compose cd ~/docker-compose (2&…

Java面试大纲(以及常见面试问答)

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Java面试大纲(以及常见面试问答&…

2025年- H25-Lc133- 104. 二叉树的最大深度(树)---java版

1.题目描述 2.思路 返回左右子树中,最高高度的子树,高度从0开始计数。 3.代码实现 class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;…

个性化推荐:大数据引领电子商务精准营销新时代

个性化推荐:大数据引领电子商务精准营销新时代 引言 在电子商务的时代,个性化推荐系统已经成为提升用户体验、增强平台竞争力的重要技术。随着大数据技术的迅猛发展,传统的推荐方法已经无法满足用户日益增长的需求。为了精准地把握用户兴趣和消费倾向,商家们依赖大数据分析…

VulnHub-OSCP靶机

前言:由于这台机器过于简单,所以我会尽量细化和介绍每个步骤以及涉及到的知识点,让正在打入门机器的你不在迷茫和硬化的操作,理解并熟悉每条命令以及参数的含义,以及把前期带给我们的信息进行快速筛选,有利…

传感器数据处理笔记

里程计模型: 两轮差分地盘的运动学模型三轮全向底盘的运动学模型航迹推算(Dead Reckoning) 里程计标定 线性最小二乘的基本原理最小二乘的直线拟合最小二乘在里程计标定中的应用 差分底盘的优势就是: 结构简单便宜&#xff0…

Spring的循环依赖问题和解决方案

在Spring框架中,循环依赖指的是两个或多个Bean之间相互依赖,形成闭环。例如,Bean A依赖于Bean B,而Bean B又依赖于Bean A。这种情况如果处理不当,会导致应用程序无法正常启动。 形成原因 构造函数注入:当使…

PDF转换工具xpdf-tools-4.05

XPDF是一个开源的PDF查看、提取和转换工具套件,使用C编写,支持多种操作系统,包括Linux、Unix、OS/2、Windows和Mac OS X‌1。XPDF不仅是一个PDF查看器,还包含多个实用工具,如文本提取器、图像转换器和HTML转换器等‌&a…

Vivado FPGA 开发 | 创建工程 / 仿真 / 烧录

注:本文为 “Vivado FPGA 开发 | 创建工程 / 仿真 / 烧录” 相关文章合辑。 略作重排,未整理去重。 如有内容异常,请看原文。 Vivado 开发流程(手把手教学实例)(FPGA) 不完美先生 于 2018-04-…

【PINN】DeepXDE学习训练营(13)——operator-antiderivative_aligned.py

一、引言 随着人工智能技术的飞速发展,深度学习在图像识别、自然语言处理等领域的应用屡见不鲜,但在科学计算、工程模拟以及物理建模方面,传统的数值方法仍然占据主导地位。偏微分方程(Partial Differential Equations, PDEs&…

NPP库中libnppc模块介绍

1. libnppc 模块简介 libnppc 是 NVIDIA Performance Primitives (NPP) 的 核心基础模块,提供跨模块的通用数据类型、内存管理和基础运算功能,不直接实现图像或信号处理算法,而是为其他模块(如 libnppi、libnpps)提供支持。 主要功能包括: 基础数据类型定义(如 Npp8u、…

#基于PCL的多平面分割系统技术文档

多平面分割系统技术文档 一、数据结构定义 /*** @brief 平面分割结果结构体* @param coefficients 平面方程系数(ax+by+cz+d=0)* @param cloud 属于该平面的点云子集* @param centroid 平面质心坐标(齐次坐标)* @param plane_id 平面编号(主平面为1)*/ struct PlaneSegmentRes…

PyTorch_张量拼接

张量的拼接操作在神经网络搭建过程中是非常常用的方法,例如:残差网络,注意力机制中都使用张量拼接。 torch.cat 函数的使用 可以将两个张量根据指定的维度拼接起来。 import torch import numpy as np def test01():data1 torch.randint(…