3D透明度JavaFX不混合网格中的所有三角形



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

事实上,我可以很好地绘制3d形状,但是当我实现透明度(在我的情况下改变网格PhongMaterial的不透明度)时,我得到一个奇怪的效果,只有几个三角形在另一个三角形后面被渲染。

看到的例子。

https://i.stack.imgur.com/XGv3f.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);

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

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

最新更新