问题标签 [openscenegraph]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3057 浏览

c++ - OpenSceneGraph Texture2D image "dirty" vs "setImage" performance

I have a 2D texture placed over rectangular area - it's a dynamic texture image (640x480).

My image data is updated in other thread often (each N milliseconds):

And after that I want to update rendered image, if I use dirty( thought this was a best way for update ) on image set to texture, e.g.

My performance is about 7-8 times slower than if I use just image replacement with same pointer.

Reading documentation and gidelines of OSG makes me think the correct way is - 'dirty()'. But it's extremly slow. Do I missunderstand something or there is a mistake in my code?

0 投票
1 回答
819 浏览

opengl - 在 osg 应用程序中编译着色器源时出现问题

我有一个 OSG 应用程序,我想在 finalDrawCallback 中对全屏四边形进行纹理映射,因为我需要在纹理完成之前渲染场景中的所有内容。这就是为什么我必须使用 openGL 调用而不是 osg 调用来执行程序和着色器的原因。

具体来说,我似乎在编译 vert 和 frag 着色器时遇到了问题。当我调用glGetShaderiv(shader, GL_COMPILE_STATUS, &param) 时,我的参数值不会改变或未定义。根据其文档,其中说产生了错误。但是,当我打电话glGetError()检查时,openGL 会报告GL_NO_ERROR.

这是设置功能

以及用于读取着色器源的辅助函数:

以及着色器本身

编辑:我刚刚想通了。问题似乎是我在进行这些调用时没有图形上下文。

0 投票
4 回答
8981 浏览

qt - 将 OpenSceneGraph 与 Qt 集成

我在 Qt 上摆弄了 OpenGL。但现在我想要复杂的场景。(加载了多个 COLLADA/MD2 模型)。

为此,我正在考虑使用 OpenSceneGraph (OSG)。是否可以将 OSG 与 Qt 集成?如果有怎么办?

谢谢。

0 投票
1 回答
592 浏览

c++ - Qt 4.7 和 4.8 之间的 OpenSceneGraph 性能

我正在使用 OpenSceneGraph 3.0.1(最新的稳定版)和 Qt。OSG 有一个名为 osgQt 的模块来创建一个用于 OSG 渲染的小部件。我注意到从 Qt 4.7 切换到 4.8 时出现奇怪的帧率下降。在 4.7.3 中,每台计算机上的帧速率最高为 60fps。对于 4.8,每台计算机上的帧最大为 38-40fps。绝对接受不了。我无法理解为什么!这是一个错误还是什么?

0 投票
1 回答
183 浏览

c++ - 使用 if 语句的奇怪行为

我正在使用 OpenSceneGraph 开发应用程序,并且在 if 语句中遇到了一些奇怪的行为。我不确定它是否特定于 API,因为它对我来说在任何层面上都毫无意义。

编码:

在哪里:

  • fileAddList_:用于维护文件名的自定义对象的静态向量

  • FileStampThread:OpenThreads 对象的一个​​实例

  • addFiles():线程中的一个方法,它保存传递给它的文件对象列表

上面的代码在我的应用程序中实现了热加载。FileStampThread 实例连续运行,检查传递给它的文件名的时间戳。一旦戳记更改,文件名将保存到另一个列表并传回以重新加载。

奇怪的是,当我启用这部分代码时,场景图的更新遍历(执行此代码时)会大大减慢,即使没有要添加的文件(帽子是,即使 fileAddList_ 为空)。结果,更新遍历时间增加了一个数量级。

但是,如果我注释掉对 sg::FileStampThread::addFiles 的调用,减速就会消失。然而,我已经将调用困在调试模式中并且它永远不会被执行。

所以,我很困惑:为什么条件测试中的一行代码会在条件测试失败时影响我的程序执行速度,而且从表面上看,它从未执行过?

作为旁注,我怀疑它可能与将变量声明为静态变量有关,因此我尝试将其声明为全局变量(使用 extern),以达到相同的效果。


编辑以解决以下一些评论:

  • 线程是 OpenThreads 对象的一个​​实例。这里没有特定于 MS 的东西。该实例是静态的。

  • addFiles() 未模板化

  • 我用其中的代码测试了循环。我交替注释掉这些行。我绝对肯定包含 addFiles() 调用是罪魁祸首。

  • 调试与发布没有什么不同,不幸的是,将代码推到一个单独的函数中没有任何改变。

  • OSG 是高性能的,关于错误预测的评论可能是正确的。研究即将...

FileStampThread 类的代码:

0 投票
5 回答
7963 浏览

visual-studio-2010 - C2086:“int WINGDIAPI”:打开场景图中的重新定义错误?

我已经解决了这个问题(从这里)。只是把它放在这里,这样遇到错误的任何其他人都会找到一个更清晰的问题和答案,而不是必须去挖掘我从哪里得到它的网站。我很快就会自己回答这个问题。

遇到的错误是:

0 投票
1 回答
953 浏览

c++ - 图像在 OSG 中随着旋转而消失

我有一个简单的 OSG 程序,它制作一个 x、y 轴并随机化该轴内的点。目的是这将导致为激光扫描数据制作 3d 查看器。(我知道它以前做过,但我们需要它是超轻的)。这是代码:

此代码有效,它将生成一个 10 单位长的 x/y 轴并开始在该轴内生成随机点。然而问题是当我在 OSG 查看器中旋转图像时,整个图像通常会消失。有时它可以通过旋转回到你开始的地方来恢复,但更多的时候它会永远消失。

有没有人知道为什么会这样?

0 投票
2 回答
1919 浏览

c++ - OpenGL 混合功能可消除图元重叠但保持整体不透明度

我有一些几何图形,它有一个单一的原始集,它是一个三条带。图元中的一些三角形重叠,所以当我将材质添加到具有 alpha 值的几何体时,我看到了重叠(如预期的那样)。我想在不改变几何形状的情况下摆脱这种效果——我尝试使用不同的混合模式(glBlendFunc()),但我无法让它工作。我得到了一些有趣的结果,但没有什么可以消除三条基元中的不透明度效果,并保留整个对象的不透明度。我正在使用 OpenSceneGraph,但它提供了一种为相关几何调用 glBlendFunc() 的方法。

在此处输入图像描述

所以从图中,假设粉红色的道路、紫色的道路和黄色的道路构成三个独立的对象,每个对象都使用一个三条创建(有多个条,但为了论证起见,假设这里只有三个不同颜色的三条) . 我基本上不想看到相同颜色内的自我交叉点

此外,我的问题与这个问题几乎相同:OpenGL, Primitives with opacity without visible overlay,但我应该注意,当我在该问题的接受答案中尝试混合模式时,条带没有在场景中渲染全部。

0 投票
1 回答
705 浏览

c++ - 来自 osg::viewer 的 RGB 图像

我有这样的代码:

现在,这个查看器对象给了我一个包含车辆模型、地形等的场景视图。我想从这个查看器中获取一个 RGB 图像,而不管数据是如何写入场景的。

本质上,我想要来自查看器的 RGB 图像,而之前没有关于将哪些数据写入场景的信息。如果查看器在 1024*768 窗口中显示某些内容,我希望它是 RGB 图像。

0 投票
2 回答
5950 浏览

cmake - 如何使用 CMake 构建 OpenSceneGraph 项目?

我刚刚下载了OpenSceneGraph源码,解压到“~/OpenSceneGraph-3.0.1”目录下,使用CMake在“~/OpenSceneGraph-3.0.1-build-eclipse-cdt”中创建一个out-of-source eclipse make项目“ 目录。当我在“~/OpenSceneGraph-3.0.1-build-eclipse-cdt”目录中执行“make”时,OpenSceneGraph 构建成功。我没有运行“sudo make install”,因为我不想将 OpenSceneGraph 紧密安装到我的 Ubuntu 系统中。

现在我想使用 CMake 使用已编译的 OpenSceneGraph 库创建一个项目。我在 CMakeLists.txt 中使用以下代码:

但似乎 CMake 找不到 OpenSceneGraph。

有谁知道 CMake 如何在“~/OpenSceneGraph-3.0.1-build-eclipse-cdt”目录中找到已编译的 OpenSceneGraph 库,并使用它来创建项目,就好像我使用“sudo make install”紧密安装了 OpenSceneGraph 一样。感谢您的任何建议。