问题标签 [scenegraph]

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 回答
892 浏览

graphics - 使用插件安装openscenegraph

我在使用 vrml 插件安装 openscenegraph 时遇到问题 谁能提供一些建议?

我正在研究 Snow Leopard,我下载了最新的 OpenVRML 0.18 和 OpenSceneGraph 3.0.1

我可以让 OpenSceneGraph 工作,但是,我需要加载 VRML 文件,当我使用 osg 读取文件时,它说它找不到任何插件。

我尝试通过从源代码编译来安装 OpenVRML,但它无法配置,因为它似乎无法精细 libboost_thread-mt 库文件,即使我已经安装了它,并且链接到它也有效。

0 投票
1 回答
218 浏览

matrix - 如何在 GLKit 场景图中实现原点/锚点?

我正在尝试使用 GLKit 在 iOS 上实现一个简单的场景图,但处理原点/锚点让我很适应。要求非常简单:

  • 有一个节点图,每个节点都有平移、旋转、比例和原点。
  • 每个节点将上面的属性组合成一个矩阵(如果它有父节点,则乘以它的父矩阵)。
  • 节点需要尊重其父级的坐标系,包括原点(即禁止平移等。子级的原点应与父级的原点对齐)

所以问题是:

需要执行哪些操作(例如translationMatrix * rotationMatrix * scaleMatrix 等)以及以什么顺序来实现对原点/锚点的正确处理?

PS - 如果您愿意发布答案,请提及您的答案是基于列还是行主要矩阵 - 这对我来说是一个常年的困惑来源。

0 投票
2 回答
5659 浏览

objective-c - 带有数千个对象的 OS X 上的 SceneKit

我正在关注本教程:http ://blog.bignerdranch.com/754-scenekit-in-mountain-lion/

我对使用 Scene Kit 很感兴趣,但我的场景可能有数千个球体。为了对 Scene Kit 进行压力测试,我尝试了这个:

例如,这适用于 1000 个球体 (10^3)​​,但对于 1,000,000 个球体 (100^3) 则失败(可能不足为奇)。我不介意不能使用一百万个球体,但我想弄清楚合理的上限是多少(5,000?15,000?)以及如何增加它。

我能做些什么来减轻这种情况?例如,我尝试了 sphere.segmentCount = 3,虽然这可以加快渲染速度,但它对内存使用没有太大影响,我怀疑这是限制因素。

此外,似乎没有 SCNPoint 类。我正在考虑在球体数量过多时切换到仅显示一个点,但是我无法从 SceneKit 文档中看到如何显示一个简单的点——我能看到的最简单的是一个三角形。

任何帮助深表感谢。

编辑: @toyos 建议将 SCNSphere 对象合并到单个 SCNGeometry 对象中(前提是它们不需要独立动画,它们不需要),但我找不到一个简单的方法来做到这一点。

SCNGeometry 是通过使用此处[SCNGeometry geometryWithSources:(* NSArray)sources geometryWithElements:(* NSArray) elements]记录的方法创建的,但我不清楚如何从我的球体创建对象。SCNGeometry

例如对于单个球体,我可以看到使用sphere.geometryElementCount来获取元素的数量,然后使用它来填充一个数组,使用[sphere geometryElementAtIndex:(NSInteger)elementIndex]它会给我元素,但我不确定如何获取“源”(或者它们甚至是)。获取几何源的方法是[sphere geometrySourcesForSemantic:(NSString*) semantic],但是这个语义字符串是什么?(它的意思是“法线”或“顶点”还是别的什么?文档很有帮助地说语义是“几何源的语义值。”没有说明语义的可能值是什么)

这只是针对单个球体,这将是毫无意义的(因为无论如何SCNSphere只是一个子类SCNGeometry),所以现在我必须添加多个球体。那么在将球体的顶点添加到我的SCNGeometry对象时,我是否必须手动平移它们?

我只是想找出最明智的方法来做到这一点。

0 投票
0 回答
248 浏览

opengl - QtQuick 2 中的简单文本项目在屏幕上可见之前会发生什么?

在尝试将 Qt5 移植到 N900 时,我遇到了与 QtQuick2/OpenGL 相关的错误。为了调查这一点,我想现在,会发生什么

直到它在屏幕上可见,换句话说,我想解释一下中间最重要的函数调用(你可以跳过一些字体细节、rtl 相关的东西或类似的东西)。它应该是这样的:

0 投票
1 回答
712 浏览

opengl - 在复杂场景中渲染半透明对象

所以我遇到了关于场景图和半透明对象的以下问题......我的问题是我想在一个场景中渲染多个半透明对象。我知道我必须先渲染不透明的物体,然后从后到前渲染半透明的物体。这运作良好......或多或少......

但真正的问题是,例如,我有一个半透明的立方体,白色(或任何其他颜色),alpha 值例如为 0.5。立方体的内部结构在波前 obj 文件中给出,因此给出了立方体单平面的顺序。我不订购对象的单个平面,因为在具有 >1000 个对象和每个对象的 >1000 个顶点的场景中这将太多,所以我只订购整个对象。如果我渲染对象的单个平面并四处移动,就会有这样一个时刻,一个比另一个更近的平面在另一个平面之前被渲染。然后第二个没有被渲染,因为深度缓冲区不允许这样做,这是渲染中的错误。

关闭深度缓冲区不是解决方案:我需要它,因为可能存在半透明和不透明的复杂对象。

任何提示我如何才能实现对象,即使它们很复杂并且既不透明又半透明,以正确的方式呈现?

0 投票
1 回答
149 浏览

java - 禁用 PointLight 会引发 CapabilityNotSetException

我有以下代码用于 Java3D 中的灯光。创建场景后,我有一个单独的线程应该关闭灯。当我的代码调用时:

我收到以下错误:

这是我的灯光代码:

而我的主要:

有谁知道为什么会这样?我还应该使用行为与场景进行交互吗?

0 投票
1 回答
1816 浏览

opengl - 有没有场景图的替代品?

场景图让您可以推断它们的位置 -> 如果不需要渲染一个节点,则该节点的子节点也不需要渲染。

但是,如果场景中的对象不断改变位置,这似乎不是最好的方法,所以你总是必须更新你的场景图。

我想知道是否有完全不同的方法来降低场景复杂性?

0 投票
0 回答
173 浏览

java - 获取对组的主要父级的引用 - Java3D

我有以下代码用于在 Java3D 中捕获鼠标点击。我希望最终能够单击场景中的对象并用鼠标移动它。

点击部分对象的输出如下:

这是因为我的 Wall3D / Floor3D 和 Carpet3D 仅由一个基元组成,例如:

地毯3D:

晚餐桌3D:

有人知道我如何获得对我单击的任何对象的主要组的引用吗?

更新

我有这个有效的代码,但它看起来非常难看。当引用一个只有一层的对象时,会为更高的层抛出一个空指针......

0 投票
2 回答
914 浏览

python - 使用 PyOpenGL 渲染场景图

我正在使用 OpenGLContext 将 VRML 文件加载到 SceneGraph 对象中。不幸的是,在我的一生中,我找不到任何展示如何渲染 SceneGraph 的示例。

我已经创建了一个上下文testcontext.getInteractive(),但是现在呢?如何渲染 SceneGraph?

0 投票
4 回答
1156 浏览

opengl-es - 引擎渲染管道:使着色器通用

我正在尝试使用 OpenGL ES 2.0(目前为 iOS)制作 2D 游戏引擎。我用 Objective C 编写了应用程序层,并用 C++ 编写了一个单独的自包含 RendererGLES20。在渲染器之外不进行任何 GL 特定调用。它运行良好。

但是我在使用着色器时遇到了一些设计问题。每个着色器都有自己独特的属性和制服,需要在主绘制调用之前设置(在本例中为 glDrawArrays)。例如,为了绘制一些几何图形,我会这样做:

如您所见,此代码非常严格。如果我要使用另一个着色器,比如涟漪效应,我将需要传递额外的制服、顶点属性等。换句话说,我必须更改 RendererGLES20 渲染源代码才能合并新的着色器。

有没有办法让着色器对象完全通用?比如如果我只想更改着色器对象而不担心重新编译游戏源怎么办?有什么方法可以使渲染器与制服和属性等无关?即使我们需要将数据传递给制服,最好的地方是什么?模型课?模型类是否知道着色器特定的制服和属性?

下面显示了 Actor 类:

模型控制器类:class ModelController { class IShader * shader; int 纹理标识;vec4 色调;浮动阿尔法;结构顶点 * 顶点数组;};

着色器类只包含着色器对象、编译和链接子例程等。

在 Game Logic 类中,我实际上是在渲染对象:

请注意,尽管 Actor 扩展了 ISceneNode,但我还没有开始实现 SceneGraph。一旦我解决了这个问题,我就会这样做。

任何想法如何改善这一点?相关的设计模式等?