在JavaFX中绘制3D表面

3

如何使用数学方程在JavaFX中绘制3D图形,基本上是二元函数,例如:z=2xy和其他3D图形?
是否有办法在JavaFX中实现它,还是我需要另一个Java库来完成。


1
你自己尝试过了吗? - dakab
3个回答

4
正如@Roland所指出的,JavaFX 3D API除了基本元素(如TriangleMesh)外,不包括其他元素,您可以使用它们创建复杂的形状,例如3D图形。
事实上,绘制2D函数f=f(x,y)是理解TriangleMesh如何工作的一个很好的用例。
基本上,您需要: 一个函数 该函数可以使用内置的Function函数接口来表达:
Function<Point2D,Number> function2D;

因此,对于任何坐标对(x,y),它将返回一个值:

double value = function2D.apply(new Point2D(x,y)).doubleValue();

网格或坐标范围

如果你想象一个矩形网格和给定数量的划分,你就有了一种获取所有绘图(x,y)点的方法,并且使用该函数,你将有第三个坐标z来生成网格所需的3D点。

TriangleMesh triangleMesh = new TriangleMesh();
triangleMesh.getPoints().setAll(x0,y0,z0, x1,y1,z1, ...);

如果您想将图像或密度图作为纹理,需要提供纹理坐标;如果暂时不需要,则只需提供一个空的坐标集:
triangleMesh.getTexCoords().setAll(0,0);

最后,您需要提供面,即三角形。 您只需要获取网格中每个三角形的顶点索引,例如在此 示例 中,使用0表示纹理索引:

faces

triangleMesh.getFaces().setAll(0,0,20,0,21,0,...);

然后您将拥有一个网格,可以在场景中渲染。

第三方库

您可以查看FXyz库,其中您将找到SurfacePlotMesh,它将完全按照上述描述执行,包括纹理坐标。 FXyz Sampler是可视化此库中大部分可能性的应用程序。这是一个绘制函数的示例:

FXyz

对于其他的三维形状,请查看库中其余的三维复杂形状。

您还可以查看VRL Studio,其中包括一个出色的三维函数绘图器等功能。


1
我写了一个JavaFX演示应用程序(嵌入swing),可以绘制3D点。您可以使用函数创建/计算一些3D点,然后进行绘制。请查看StarterFrame类,其中生成了这些点。更多的点意味着更详细的绘图。也许这对您自己编写某些内容有所帮助。否则,我建议使用一个库。

https://github.com/adihubba/javafx-3d-surface-chart

Gauss normal distribution


0

JavaFX没有内置机制来绘制3D图形。您需要使用第三方库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接