问题标签 [coin3d]

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 投票
0 回答
257 浏览

c++ - 在 Fedora 20 上使用 cmake 的 Coin3D 库 - 致命错误:Inventor/Qt/SoQt.h:没有这样的文件或目录

我创建了一个使用 Cmake 和 Coin3D 库的项目:https ://github.com/tuxdna/phyloviz

我得到一个fatal error: Inventor/Qt/SoQt.h: No such file or directory. 这就是我正在做的事情:

现在让我们编译代码

即使我使用 指定了包含目录cmake ../ -DCOIN3D_INCLUDE_DIRS=/usr/include/Coin2/,我也得到了fatal error上述内容。

这在 Ubuntu 14.04 上运行良好。我该如何解决这个问题?

0 投票
1 回答
683 浏览

c++ - FBO 的延迟着色器纹理显示为黑色

我正在尝试使用延迟着色来实现 SSAO,但在延迟片段着色器中访问我的纹理时遇到问题。代码在 C++/Qt5 中,并利用 Coin3D 生成 UI 的其余部分(但这在这里应该无关紧要)。

延迟通道的片段着色器是:

运行延迟通行证的代码是

我知道纹理已在几何缓冲区创建中得到正确处理,因为我可以将它们转储到文件中并获得预期的结果。

延期通行证不起作用。着色器编译正确,我在屏幕上得到以下结果:

结果不好

我的代码的最后一部分(DeferredPassBegin/Debug)是将 FBO 绘制到屏幕上(如屏幕截图所示),以证明 GBuffer 是正确的。

当前的结果似乎意味着纹理没有正确绑定到它们各自的制服,但我知道内容是有效的,因为我将纹理转储到文件并获得了与上图相同的结果。

我在 GBuffer 中的绑定函数是:

最后,纹理是 512/512,我在 GBuffer 中创建了它们:

在这个阶段如何进一步调试?我知道纹理数据是有效的,但我似乎无法将其正确绑定到着色器(但我有其他着色器使用从文件加载的纹理并且工作正常)。

---编辑 1 ---

如要求, DeferredPassBegin/Debug 的代码(主要来自本教程

0 投票
0 回答
188 浏览

visual-studio-2010 - 使用 VS2010 在 Win7 上 SoQt 1.5.0 编译错误

我尝试在 windows7 中使用 VS2010 编译 SoQt 1.5.0,但我因编译错误而失败:

src\Inventor\Qt\editors\SoQtMaterialEditor.cpp(41):致命错误 C1083:无法打开包含文件:“Inventor/Qt/editors/SoQtMaterialEditor.h”:没有这样的文件或目录

SoQt我没有修改任何文件,但是SoQt的代码版本只有msvc9,我的qt是4.8.2。我想可能是源码丢失了SoQtMaterialEditor.h.in和SoQtMaterialEditor.h.cpp,那么谁有这个文件或者可以编译的源码呢?

我必须使用这个库,因为我想通过使用 GraspIt! 来模拟手部。是否有其他编译方法来编译这个库或其他可以处理手握模拟的库?谢谢!

0 投票
1 回答
164 浏览

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

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

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

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

0 投票
0 回答
2832 浏览

c++ - 如何使用 OpenCascade 导入 STEP 文件并使用正确颜色的 coin3d 显示?

我正在尝试使用 OpenCascade 导入 STEP 文件,并使用 Open Inventor 兼容的 coin3d 库将它们显示在屏幕上。不幸的是,我总是以颜色工作或几何形状正确而结束,正确定位具有正确颜色的零件似乎不起作用。

我还尝试制作一个复合形状,以防有超过 1 个形状,正如我在 OpenCascade 论坛中找到的那样,但没有区别。

一般来说,在网上找到的简单 STEP 文件导入很好(我假设它们只有一个部分),但从实体作品导出的更复杂的多部分对象要么具有正确的几何形状,要么具有正确的颜色,但绝不会两者兼而有之。

有问题的部分在这里:

如果我使用 IsFree(aLabel) 所有几何图形都是正确的,但几乎没有导入颜色。

如果我否定它,通过使用 if (!Assembly->IsFree(aLabel) ) ... 导入的几何图形到处都是,旋转,变换,但颜色正确。

如果我完全删除 if ,两种情况都处于活动状态,它会导入所有内容,一次是正确的地理,没有颜色,第二次是在某处翻译和旋转,颜色正确。

我的想法是,平移/旋转的彩色对象可能只有平移/旋转信息,在它们被转换的地方被忽略,但是当我输出形状 Transformation() 信息时,位置和旋转都是 0。

下面是其余代码,实际上将导入的形状转换为多边形对象以进行显示:

我究竟做错了什么?为什么物体是双倍的?

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 投票
2 回答
412 浏览

c++ - Access properties of object from static method

I am programming against an external library which requires a static callback function. I declared my callback as static but then i loose access to the object properties i want to modify with this callback.

Is there a way how can create a static callback while being able to access my current objects properties? The library i use is the openInventor library. The callback wiring up is done with the following code:

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

coin3d - SoOffscreenRenderer 可以使用大于 1024 的图块吗

coin3d 离屏渲染类SoOffscreenRenderer能够渲染不适合屏幕或渲染缓冲区的大图像(例如 4000 x 2000 像素)。这是通过将图像划分为一个接一个渲染的图块来完成的,其中这些图块的默认大小为 1024 x 1024。

看了下代码,SoOffscreenRenderer发现CoinOffscreenGLCanvas环境变量COIN_OFFSCREENRENDERER_TILEWIDTH COIN_OFFSCREENRENDERER_TILEHEIGHT。我可以使用这些变量更改图块大小,但只能更改为小于 1024 的大小。我可以创建 512 x 512 像素和 768 x 768 像素的图块。当我使用大于 1024 的值时,生成的图块总是大小为 1024 × 1024。

是否可以使用更大的瓷砖尺寸,如 2048 x 2048 或 4096 x 4096,我该怎么做?

0 投票
1 回答
1411 浏览

c++ - Qt5、Coin3D 和 SoQt

我正在尝试使用 Qt5、SoQt(版本 1.5.0)和 Coin3D(3.1.3)。我使用本网站上的说明安装 Coin3D。我也尝试安装 SoQt(在此处找到说明。我不得不稍微改变一下这些导出命令:

我尝试了四种不同版本的导出 INCLUDE,因为我对它的目的一无所知,我不确定这是否是我得到错误的原因:

这是错误消息出现的地方:(下面的简短摘要)

我可能错了,但似乎他正在寻找 Qt4 而不是 Qt5,因为

它也读

这就是为什么我尝试使用 qt5/QtCore 而不是 qt5 作为路径的原因,因为在 QtCore 中有一个 qglobal.h 但它不会改变任何东西。

在使用 Qt5 设置 SoQt 时是否有其他人遇到过类似的问题并且可以帮助我?

提前致谢!