问题标签 [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.
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 上运行良好。我该如何解决这个问题?
c++ - FBO 的延迟着色器纹理显示为黑色
我正在尝试使用延迟着色来实现 SSAO,但在延迟片段着色器中访问我的纹理时遇到问题。代码在 C++/Qt5 中,并利用 Coin3D 生成 UI 的其余部分(但这在这里应该无关紧要)。
延迟通道的片段着色器是:
运行延迟通行证的代码是
我知道纹理已在几何缓冲区创建中得到正确处理,因为我可以将它们转储到文件中并获得预期的结果。
延期通行证不起作用。着色器编译正确,我在屏幕上得到以下结果:
我的代码的最后一部分(DeferredPassBegin/Debug)是将 FBO 绘制到屏幕上(如屏幕截图所示),以证明 GBuffer 是正确的。
当前的结果似乎意味着纹理没有正确绑定到它们各自的制服,但我知道内容是有效的,因为我将纹理转储到文件并获得了与上图相同的结果。
我在 GBuffer 中的绑定函数是:
最后,纹理是 512/512,我在 GBuffer 中创建了它们:
在这个阶段如何进一步调试?我知道纹理数据是有效的,但我似乎无法将其正确绑定到着色器(但我有其他着色器使用从文件加载的纹理并且工作正常)。
---编辑 1 ---
如要求, DeferredPassBegin/Debug 的代码(主要来自本教程)
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! 来模拟手部。是否有其他编译方法来编译这个库或其他可以处理手握模拟的库?谢谢!
texture-mapping - 在 Open Inventor 中,纹理在长方体的面上被拉伸
我正在尝试编写一个小脚本来将纹理应用于矩形长方体。为了实现这一点,我遍历了场景图,并且无论在哪里找到 SoIndexedFaceSet 节点,我都会在其之前插入一个 SoTexture2 节点。我将图像文件放在 SoTexture2 节点中。我面临的问题是纹理正确应用于 YZ 平面中的 2 个面(比如 face1 和 face2),但对于其他 4 个平面,它只是在两个面的边界处拉伸纹理(1和 2)。
它看起来像这样。
正面是它应该看起来的样子,但正如您所见,在其他两个面上,它只是外推正面的角值。任何想法为什么会发生这种情况以及避免这种情况的任何方法?
c++ - 如何使用 OpenCascade 导入 STEP 文件并使用正确颜色的 coin3d 显示?
我正在尝试使用 OpenCascade 导入 STEP 文件,并使用 Open Inventor 兼容的 coin3d 库将它们显示在屏幕上。不幸的是,我总是以颜色工作或几何形状正确而结束,正确定位具有正确颜色的零件似乎不起作用。
我还尝试制作一个复合形状,以防有超过 1 个形状,正如我在 OpenCascade 论坛中找到的那样,但没有区别。
一般来说,在网上找到的简单 STEP 文件导入很好(我假设它们只有一个部分),但从实体作品导出的更复杂的多部分对象要么具有正确的几何形状,要么具有正确的颜色,但绝不会两者兼而有之。
有问题的部分在这里:
如果我使用 IsFree(aLabel) 所有几何图形都是正确的,但几乎没有导入颜色。
如果我否定它,通过使用 if (!Assembly->IsFree(aLabel) ) ... 导入的几何图形到处都是,旋转,变换,但颜色正确。
如果我完全删除 if ,两种情况都处于活动状态,它会导入所有内容,一次是正确的地理,没有颜色,第二次是在某处翻译和旋转,颜色正确。
我的想法是,平移/旋转的彩色对象可能只有平移/旋转信息,在它们被转换的地方被忽略,但是当我输出形状 Transformation() 信息时,位置和旋转都是 0。
下面是其余代码,实际上将导入的形状转换为多边形对象以进行显示:
我究竟做错了什么?为什么物体是双倍的?
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 SoEngineOutputs
。MAX_NUM_SAMPLE_SETS = 100
是最大的可能 - 大多数可视化需要比这少得多(少于 10 个),所以我希望能够在运行时确定输出的数量。
所以我的问题是:
SoEngineOutput
有没有办法在运行时在 Coin3d 中添加任意数量的s?- 为什么这么多的“SoEngineOutput”声明会对性能造成如此大的影响?(这可能是一个通用的 C++ 问题,我将为此创建一个单独的问题,或者它是 Coin3d 的问题)
- 有没有更好的方法来解决这个问题?
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:
graphics - 如何在 Open Inventor 3D Graphics API 中画线?
我是 Open Inventor 3D Graphics API 的新手,我只想在给定的 3-D 坐标之间画一条线。假设第一个点是 0,0,0,第二个点是 1,1,1。这个 API 的文档和示例真的很糟糕,并且无法正确显示。我正在使用 Visual Studio。
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,我该怎么做?
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 时是否有其他人遇到过类似的问题并且可以帮助我?
提前致谢!