问题标签 [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 回答
1290 浏览

qt - 我怎样才能找到这些在我的场景中扭曲对象的 OpenGL 调用?

我正在混合使用 OpenGL 的两个库:Qt 和 OpenSceneGraph。我的目标是 OpenGL ES 2,所以一切都是通过着色器和 ES 2 兼容调用完成的。

通过尝试将 OSG 绘制到 QDeclarativeItem 上,我专门将 OSG 与 QtDeclarative 一起使用。我按照 Qt 文档中建议的方式执行此操作:在 beginNativePainting()/endNativePainting() 之间包装所有 OpenGL 调用。

这工作正常,直到我在我的 OpenSceneGraph 场景中使用纹理。当我这样做时,我的 QML 窗口会因为没有更好的词而“混乱”。为了使其尽可能简单,我的 OSG 场景由一个应用了纹理的平面组成。我使用基本的 OpenGL 调用重新创建了场景,并且不再出现问题。这里的问题总结为一堆图片:

  • QtDeclarative 引擎使用 OpenGL 来绘制东西。我设置了一个简单的 QML 页面:

在此处输入图像描述

  • 我直接使用 OpenGL 创建了一个简单的场景。这是一架飞机,上面涂有纹理。

在此处输入图像描述

  • 现在我尝试在 OSG 中设置相同的场景......相同的着色器等。

在此处输入图像描述

您可以看到最后一个屏幕截图发生了一些奇怪的事情。不用担心原始 OpenGL 场景是透明的黑色背景,这只是 OSG 使用黑色透明色。问题是使用 QML(矩形)设置的其他项目搞砸了。

编辑:澄清发生了什么:我用 QML 绘制的矩形都延伸到屏幕的右边缘。我还注意到,如果我在 QML 中的 OpenSceneGraph 项目之后绘制矩形,它们不会出现(我之前没有注意到这一点)。我在以下屏幕截图中的 OSG 项目之后绘制了紫色黑色矩形......请注意它消失了。可能会发生更多奇怪的事情,但这是我观察到的所有玩矩形的东西。

在此处输入图像描述

在此处输入图像描述

我对 OpenGL 还很陌生,所以我不知道什么样的调用/状态设置会导致这样的事情发生。我认为 OpenSceneGraph 会进行一些 OpenGL 状态更改,这会扰乱 Qt 的绘图引擎。我也知道这只发生在 OSG 使用纹理时……如果我不在我的 OSG 场景中应用纹理,这不会发生。这就是我卡住的地方。

此外,我尝试使用 BuGLe 来获取在 OSG 中启用和不启用纹理的 OpenGL 调用跟踪,以查看是否可以找出有问题的状态更改。我发现了一些差异,甚至是 OSG 在两者之间更改的一些全局状态(例如 glPixelStorei()),但是重置我发现的更改没有任何区别。如果我知道要寻找什么,那将有很大帮助。如果有人感到疯狂,我也有堆栈跟踪:

编辑2: 这是一个可能有用的差异。在相关行明显之前,您需要向下滚动。 http://www.mergely.com/nUEePufa/

编辑3: 哇!好的,那个差异帮助了我很多。OSG 启用 VertexAttribArray 3 但不会禁用它。在 OSG 渲染其帧之后调用 glDisableVertexAttribArray(3) 似乎部分解决了问题;不再有 QML 矩形的拉伸。但是,在 OSG 项目之后绘制的矩形仍然不显示

0 投票
0 回答
1657 浏览

c++ - OpenSceneGraph - 绘制 3D 墙

我有下面的代码。我从教程中得到了这个想法,但我的代码在运行时没有显示任何内容。目标是在 3d 中绘制墙。我的猜测是我的分数可能会偏离,但我不确定如何最好地选择分数,以及如何缩放。

0 投票
2 回答
230 浏览

c++ - 将相机指向 O(0,0,0), 45 度

我在设置相机时遇到问题,使其指向原点 O(0,0,0),与所有其他坐标轴成 45° 角,所有坐标均为正(当然应该具有相同的值)。你可以在图像中看到我得到的最接近的

在此处输入图像描述

但是,如您所见,x此处的值为负,因此相机位于YZ平面的错误一侧。

完整的可编译项目可以在这个修订版的要点中找到。

完成的相关矩阵乘法是

在文件中Simple.cpp

我试图弄清楚这是如何工作的(数学上和编程上)。我更喜欢尽可能少地依赖于openscenegraph的解决方案,更多地依赖于数学方面,因为我一开始想自己做数学,以真正掌握它是如何工作的。所以还没有四元数或其他高级的东西,这些东西在基本的线性代数大学课程中都没有教过。

0 投票
1 回答
1886 浏览

c++ - 围绕世界的 Y 轴旋转相机(在 O(0,0,0) 处)

我正在尝试围绕Y世界轴旋转相机,在我的项目中用 3D 十字标记。

我所做的是围绕它自己的轴旋转它,这很酷,但这不是我想要的。

如何通过使用四元数和一些数学来实现这一点,而不是 osg::PositionAttitudeTransforms或任何易于使用但难以理解的基础设施。

我想接触它背后的数学。

相关的代码是

您可以在文件底部找到它Simple.cpp。整个项目可以在本次修订中的要点中找到。

在 GNU/Linux 机器上,只需键入make,它应该可以在安装了适当的工具的情况下开箱即用。

0 投票
2 回答
3741 浏览

c++ - OpenSceneGraph 浮动图像

使用 C++ 和 OSG 我正在尝试将浮动纹理上传到我的着色器,但不知何故它似乎不起作用。最后,我发布了我的部分代码。主要问题是如何使用浮点数组中的数据创建 osg::Image 对象。在 OpenGL 中,所需的代码是

但在这种情况下,我必须使用 OSG。

使用时代码运行良好

代替

但我需要上传生成的浮点数据。也无法切换到无符号字符数组,因为我需要着色器代码中的 GL_LUMINANCE32F_ARB 数据范围。

我希望有人可以在这里帮助我,因为谷歌无法帮助我(谷歌搜索例如:osg float image)。所以这是我的代码。

我在网上找到了另一种方法,让 osg::Image 创建数据并在之后填充。但不知何故,这也行不通。我在新的 XYZ 之后插入了这个;线。

0 投票
2 回答
90 浏览

c++ - osgDB/FileUtils 在我的代码中导致编译器错误

我正在尝试使用 OSG 编译我的项目,并在 OpenSUSE 12.1 中为它安装了所有必要的 rpm。我不确定发生了什么,因为我所做的只是#include,而我的编译器(gcc 4.6.2)在其中崩溃说:

'('令牌之前的预期标识符'

问题是当我单击错误时,它会将我带到 FileUtils 中

枚举值 {

好的,

SOURCE_EQUALS_DESTINATION,

... 等等

};

我不明白发生了什么,非常感谢任何帮助。

0 投票
1 回答
945 浏览

qt - 试图在 OSG 中制作 Qt HUD,相机问题

我是 OSG 和 Qt 的新手,我仍然试图在我的 OSG 窗口上制作 Qt HUD,我想要的是在 OSG 场景中固定的 Qt 界面元素,而不是随着模型旋转。问题是,我需要 INSIDE osg 场景中的 Qt 元素,而不是 Qt 窗口中的 OSG 场景(如在 OSGviewerQt 示例中)。

我得到的是带有 --useWidgetImage --fullscreen 参数的 OSGQtWidgets 示例,它显示了 OSG 模型顶部的固定 Qt 控件。问题是,它为 OSG 模型之上的 qt 元素创建了新的(固定)相机——因此,用户无法旋转和移动 OSG 模型,因为相机不透明。

所以问题是:有没有办法制作带有可用 Qt 元素的透明相机?还是有其他方法可以实现我的目标?

先感谢您!

0 投票
1 回答
630 浏览

qt - 无法将 Qt 控制台应用程序与 Openscengrapgh 链接

我已经成功地将 Openscenegraph 与 Visual Studio 2008 集成。作为示例给出的示例“cessna.osg”在 VS2008 中作为控制台程序运行良好。但是当我尝试在 Qt 中运行与控制台相同的代码时,它会出现错误。我在 windows7 64 位上使用带有 Qt 选项的 VS2008 编译器使用 CMAKE 构建了 Openscenegraph 3.0。在 Qt 中,我使用的是 QT 4.7.4 Desktop-MSVC2008 (QtSDK) 版本。我的 Qt .pro 文件看起来像这样......

我正在使用相同的库并在 VS2008 IDE 中包含文件路径,如上所述。

main.cpp 文件看起来像 dis...(与 VS2008 IDE 中的相同)

我得到的错误是......

指导我,以便我可以将应用程序作为控制台运行。或者有没有其他方法可以在 Qt 控制台上运行 Openscenegraph 应用程序?

0 投票
1 回答
1659 浏览

android - HUD 摄像机的正确视图矩阵是什么?

我在带有 GLES2 的 Android 中使用 OpenSceneGraph。

我有两台摄像机:一台用于场景,另一台用于 HUD。场景摄像机是我的 osgViewer 中的主摄像机。我的麻烦在于HUD的摄像头。我正在尝试将 OSG 几何图形添加到 2D 场景(HUD 摄像头),但似乎无法显示出来。

我正在使用自定义着色器来操纵几何体的位置。据我了解,投影矩阵是正确的,但我认为问题可能出在视图矩阵上,因为我使用的是两个摄像头。我尝试将 HUD 的视图设置为场景的初始视图,但无济于事。如果我在这方面错了,请纠正我。

之后,我将hud_camera作为孩子附加到场景数据中。除了查看场景中的特定点之外,场景相机也没有做任何特别的事情。

我确实知道正在创建几何图形。通过在顶点着色器中使用它:

gl_Position = osg_ModelViewProjectionMatrx * osg_Vertex

我可以在场景的左侧看到它。

0 投票
1 回答
506 浏览

qt - 忽略 OSG 内 Qt 上的键盘按下

我是 Qt 的新手,遇到了一个我无法处理的问题,比如一个月。情况是这样的:我有 OpenSceneGraph 项目(它是 OpenGL)并试图在 3d 场景中制作 Qt 界面。我认为我没有必要如何处理它,但是如果有人想在这里了解更多信息,请参阅 OSG 论坛上的更多信息(尽管我没有在那里得到解决方案)。问题是,当单击键盘上的任何键时,Qt 控件会在屏幕上跳跃,不再对任何(鼠标或键盘)事件做出反应。不过,整个程序仍在继续工作。总而言之,我的问题是:有没有办法让 Qt 小部件忽略所有按键? 我搜索了很多,但找不到任何可行的解决方案。

提前致谢!