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

时间:2015-08-11 11:08:14

标签: java javafx 3d transparency opacity

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

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

参见示例。

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

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

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

如果有所不同,我目前正在使用环境光。

一些示例代码:

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);

1 个答案:

答案 0 :(得分:0)

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

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