问题标签 [openinventor]

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 投票
1 回答
164 浏览

texture-mapping - 在 Open Inventor 中,纹理在长方体的面上被拉伸

我正在尝试编写一个小脚本来将纹理应用于矩形长方体。为了实现这一点,我遍历了场景图,并且无论在哪里找到 SoIndexedFaceSet 节点,我都会在其之前插入一个 SoTexture2 节点。我将图像文件放在 SoTexture2 节点中。我面临的问题是纹理正确应用于 YZ 平面中的 2 个面(比如 face1 和 face2),但对于其他 4 个平面,它只是在两个面的边界处拉伸纹理(1和 2)。

它看起来像这样。纹理拉伸

正面是它应该看起来的样子,但正如您所见,在其他两个面上,它只是外推正面的角值。任何想法为什么会发生这种情况以及避免这种情况的任何方法?

0 投票
0 回答
131 浏览

c++ - 如何在 SoQtExaminerViewer 中使用不同的线程录制 mpeg?

我想从SoQtExaminerViewer. 最初的问题是,当我调用 时SoMpegNavRenderer::stop(),查看器必须等待代码完成。因此,我尝试使用std::thread()std::async()创建新线程来处理 mpeg 视频的录制。我相信,录制已经在后台发生并且能够创建视频。

但是,(这是我需要帮助和理解的)当代码在用户能够控制查看器之前从头开始重播/重绘 mpeg 视频时到达SoMpegNavRenderer::stop()视图/渲染区域。SoQtExaminerViewer我的意图是让用户按下r录制,做一些相机移动,按下c停止录制,保存视频并继续他们的工作。

下面是完整的代码:

0 投票
1 回答
42 浏览

windows - 如何将从 3D 线投影的色带可视化为“始终朝前”

我们目前有一条由 3D 空间中的点组成的(曲线)线(在开放式发明者中,但该问题的解决方案可能与产品无关)。

我们想要绘制一个描述从该线正交投影的带的表面,并且在旋转时始终面向相机。

(例如,用户会看到一条丝带,它以线条本身作为它的一侧来描述线条的曲线,然后当我们围绕场景旋转时,丝带将围绕线条“旋转”,因此它总是面向用户)

我们有:

  • 摄像机的位置和旋转

  • 沿线各点的位置

我们认为一种方法是,对于每对相邻点,找到与相机正交的平面和与这些点之间的线正交的平面相交的线,并沿该线投影设定的距离,但这并没有不要给我们任何接近正确结果的地方。(下面的故障代码)。

这种方法是否正确,如果正确,下面应该描述它的代码有什么问题?

如果没有,我们如何实现核心目标(功能区始终面向用户)?

0 投票
1 回答
102 浏览

c++ - 如何使用 Coin3d/OpenInventor 添加任意数量的引擎输出

我正在编写一个使用 Coin3d 库(基于与 OpenInventor 相同的代码库)可视化大型数据集的应用程序。我一直在努力解决这个问题,但我从未找到令人满意的解决方案。

数据来自可变数量的“条带”,我创建了一个SoEngine收集要可视化的数据,将其发送到多个输出,然后连接到SoQuadMesh每个条带的一个用于渲染。

我在这里使用引擎的原因是数据是从数据源中获取的,并且随着用户在其周围导航而更新可视化。也就是说,随着用户放大和缩小,图像的分辨率会发生变化(根据谷歌地图)。数据在后台线程中检索(需要一两秒),然后用于更新引擎输出。

问题是似乎没有办法创建任意数量的s - 在使用宏SoEngineOutput添加到引擎之前,它们都必须在类定义中声明。SO_ENGINE_ADD_OUTPUT

通过分析 Coin 源代码,我试图通过SO_ENGINE_ADD_OUTPUT以略微修改的形式实现宏背后的代码来解决此问题,但最终我失败了(或失去了勇气),因为它SoEngine::outputdata是一个应该只创建一次的静态字段;我不想冒险重新初始化它的后果,而不知道整个实现的细节。

我现在工作的解决方案是将所有输出声明为可能的最大值,如标题中所示:

然后在 Engine 构造函数中,将每个输出添加到引擎输出列表中:

这可行,但是当 Engine 类在实例化大约 20 秒时MAX_NUM_SAMPLE_SETS设置为 100 时,性能会受到影响 - 这意味着声明 600 SoEngineOutputsMAX_NUM_SAMPLE_SETS = 100是最大的可能 - 大多数可视化需要比这少得多(少于 10 个),所以我希望能够在运行时确定输出的数量。

所以我的问题是:

  1. SoEngineOutput有没有办法在运行时在 Coin3d 中添加任意数量的s?
  2. 为什么这么多的“SoEngineOutput”声明会对性能造成如此大的影响?(这可能是一个通用的 C++ 问题,我将为此创建一个单独的问题,或者它是 Coin3d 的问题)
  3. 有没有更好的方法来解决这个问题?
0 投票
3 回答
686 浏览

graphics - 如何在 Open Inventor 3D Graphics API 中画线?

我是 Open Inventor 3D Graphics API 的新手,我只想在给定的 3-D 坐标之间画一条线。假设第一个点是 0,0,0,第二个点是 1,1,1。这个 API 的文档和示例真的很糟糕,并且无法正确显示。我正在使用 Visual Studio。

0 投票
0 回答
377 浏览

vtk - 使用 VTK 的场景图

似乎没有任何关于使用 VTK 创建场景图的内容。我必须在软件中用 VTK 替换 Coin3d(和 SoQt)。由于 Coin3d 专注于场景图,我不知道如何替换 Coin3d 提供的某些类(例如SoSeparator)。

我也找不到任何使用 VTK 创建场景图的教程/介绍。任何人都知道一些资源吗?还是使用 VTK 创建场景图是个坏主意?

0 投票
1 回答
42 浏览

openinventor - 物体/材质在相机前面

我已经开始使用 openinventor。我在查看器中有一个 socube。我想检查一下 socube 是否在镜头前。因此,当我将立方体移动到远离相机视图的某个地方时,值应该是错误的。

现在我想添加一个行为,比如如果我将锥体从相机移开,它会返回 false

0 投票
2 回答
152 浏览

c++ - OpenInventor 从 9.8 升级到 10.4.2 后 GLSL 纹理返回零

在将我们的源代码从 OpenInventor 9.8 升级到 10.4.2 时,我遇到在 10.4.2 中片段着色器中计算的某些颜色始终为黑色,而在 9.8 中一切正常。通常我们使用自己计算的纹理,但出于调试目的,我使用了 OpenInventor 示例中的示例纹理:

这是适用于 9.8 的片段着色器:

这是不适用于 10.4.2 的片段着色器:

查看器保持完全黑色,因此我假设调用texture返回始终为零。取消注释gl_FragColor = vec4(coord.xy, 0, 1);给出相同的结果。因此,我假设coord计算正确。

当我们从版本#120 跳转到#410 时,我可以想象我需要做一些其他的事情来让texture我们的片段着色器工作。是否有任何相关的变化GLSL。我需要做什么才能让着色器工作?

如果相关,以下是一些系统信息:

  • 操作系统:Windows 10
  • 显卡:NVIDIA Quadro K2200
0 投票
2 回答
74 浏览

openinventor - openinventor/coin3d如何实现像OpenGL一样的双面渲染?

Coin3D默认使用单面渲染如下图:</p>

openinventor/coin3d如何实现像OpenGL一样的双面渲染?</p>

0 投票
1 回答
37 浏览

c++ - 如何为 PoPieChartRep 设置注释颜色?

简而言之,我如何为 PoPieChartRep 的标签设置自定义颜色(不同于切片)?

更详细地说:我正在尝试使用 OIV 的 PoPieChartRep 类创建一个饼图,并且我希望字符串“Value1”和“Value2”具有特定的颜色。

简单的饼图

我在PoPieChartRep的在线参考中看到了一个字段,将isAnnoSliceColor设置为false会使标签变白。

我怀疑我应该使用材质来设置颜色,但不知道应该使用哪个对象?还检查了 PoLabelHints 和 PoMiscTextAttr 作为参考建议,但没有找到任何颜色/材料相关的字段。