【问题标题】:3D Transparency JavaFX not blending all triangles in a mesh3D 透明度 JavaFX 不混合网格中的所有三角形
【发布时间】:2015-11-03 13:58:06
【问题描述】:

我目前正在绘制一个通过行进立方体算法生成的单个透明 3D 网格,目的是在问题解决后拥有更多对象。

就目前而言,我可以完美地绘制 3d 形状,但是当我实现透明度时(在我的例子中是更改网格 PhongMaterial 的不透明度),我得到了一种奇怪的效果,即在另一个三角形后面时只渲染了几个三角形。

参见示例。

http://i.imgur.com/1wdmYYs.png (抱歉,由于rep,我无法直接发布图片)

当“棍子”在较大的形状后面时,三角形似乎丢失了,我目前不知道为什么。

红色是所有以相同方式渲染的相同网格。

如果有影响的话,我目前正在使用环境光。

一些示例代码:

MeshView mesh = generate Mesh Data via marching cube;
mesh.setCullFace(CullFace.None);

PhongMaterial mat = new PhongMaterial(1, 0, 0, 0.5d);

AmbientLight light = new AmbientLight();
light.setColor(new Color(1, 0, 0, 0.5)); // I dont believe the alpha makes a difference
light.setOpacity(0.5);


mesh.setMaterial(mat);
group.getChildren().addAll(light, mesh);

【问题讨论】:

  • 您使用的是什么 JDK 版本?注意透明度的工作基于场景中节点的顺序,正如您在 question 中看到的那样
  • 我相信我正在使用 JDK8u60 b15。我会尝试更新到最新版本,看看是否有任何变化。在示例中,我只渲染一个网格,因此只有一个节点。
  • 这就是我所说的顺序,你需要有几个3D形状才能看到透明效果。最上面的透明节点将让您看到它后面的其余形状。
  • 确保按照与相机的距离对网格中的三角形进行排序。否则,透明度将无法按预期工作。
  • 我的问题更多是关于如何在单个形状中处理透明度(红色形状是单个模型)。 IE。它自己的三角形隐藏在自己的背后。从我收集到的信息来看,透明度对多个对象都很好,但似乎为每个对象创造了一种战略效果。这是一个效果示例。 i.imgur.com/JtyirsA.png 我希望这表明问题在于每个 3d 形状以及它如何处理其自己的网格中的不透明度。抱歉,如果图片难以理解,我现在会尝试制作更好的版本。

标签: java javafx 3d transparency opacity


【解决方案1】:

仅当三角形面按与相机的距离排序时,透明度才能正常工作。这是消费者 3D 卡将任何场景分解为三角形的事实的产物,因此它们可以单独渲染每个场景。当您有数百个内核时,这允许同时渲染数百个三角形。较旧的卡片会显示它们每秒可以渲染的三角形数量。

在更现代的卡片上,部分三角形渲染已移至驱动程序,该驱动程序使用卡片上的矢量引擎在软件中计算每个点的颜色。这仍然很快,因为您可以拥有 1000 多个矢量 CPU,而且它允许您创建复杂的程序来修改每个顶点/像素,然后再将其存储到内存中,从而允许您创建闪亮的表面等。

【讨论】:

  • 我相信你是对的。 (对于那些有同样问题的人来说,一个有趣的链接opengl-tutorial.org/intermediate-tutorials/…)你知道我可以用什么技术来订购这些面孔吗?如果我在 OpenGL 中编写此代码,我可以对每个摄像机移动重新排序,但考虑到我使用的是 javafx 的场景图,我是否仍需要在每次更新时重新排序,或者 javafx 是否以不同的方式处理图形?
  • 我在想自己。正如我所看到的,这是一个常见/标准问题,应该有一个简单的标准方法来对三角形条进行排序,但谷歌没有发现任何东西。也许问一个新问题?
  • 想我可能需要。为帮助干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 2017-12-15
相关资源
最近更新 更多