在JavaFX中绘制3d表面

时间:2015-07-31 21:52:58

标签: java javafx 3d javafx-3d

如何使用数学方程在JavaFX中绘制3d图形, 基本上是2个变量函数,例如:z=2xy和其他3D数字?
有没有办法在JavaFX中执行此操作,或者我是否需要另一个Java库。

3 个答案:

答案 0 :(得分:3)

正如@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)点,并且使用该函数,您将获得第三个坐标{{1} }生成网格所需的3D点。

z

如果您想将图像或密度贴图作为纹理,或者现在只需要一组空坐标,则需要提供纹理坐标:

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

最后,您需要提供三角形的面。您只需要获取网格中每个三角形的顶点索引,就像在此sample中一样,在这种情况下使用0作为纹理索引:

faces

triangleMesh.getTexCoords().setAll(0,0);

你将拥有你的网格,准备在场景中渲染。

第三方图书馆

您可以查看FXyz库,您将在其中找到SurfacePlotMesh,其完全如上所述,包括纹理坐标。 FXyz Sampler是一个可视化此库中大多数可能性的应用程序。这是绘制函数的样本:

FXyz

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

您可以查看VRL Studio,其中包括一个出色的3D功能绘图仪等。

答案 1 :(得分:1)

我编写了一个JavaFX演示应用程序(嵌入在swing中),可以绘制3d点。 您可以使用您的函数创建/计算一些3d点,而不仅仅是绘制它。查看生成点的StarterFrame类。更多点意味着更详细的情节。也许这可以帮助你自己写点东西。否则我会推荐一个图书馆。

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

Gauss normal distribution

答案 2 :(得分:0)

JavaFX没有用于绘制3d图形的内置机制。您必须使用第三方库。