如何使用数学方程在 JavaFX 中绘制 3D 图形,基本上是 2 个变量函数,例如:z=2xy
和其他 3D 图形?
有没有办法在 JavaFX 中做到这一点,或者我需要另一个 Java 库。
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)
点,并且使用该函数,您将拥有第三个坐标z
来生成网格所需的 3D 点。
TriangleMesh triangleMesh = new TriangleMesh();
triangleMesh.getPoints().setAll(x0,y0,z0, x1,y1,z1, ...);
如果您想将图像或密度图作为纹理,或者现在只是一组空坐标,则需要提供纹理坐标:
triangleMesh.getTexCoords().setAll(0,0);
最后,您需要提供面,即三角形。您只需要获取网格中每个三角形的顶点索引,就像在这个示例中一样,在这种情况下使用 0 作为纹理索引:
triangleMesh.getFaces().setAll(0,0,20,0,21,0,...);
你将拥有你的网格,准备好在场景中渲染。
第三方库
您可以查看FXyz库,您会在其中找到SurfacePlotMesh
,该库的功能与上述完全一样,包括纹理坐标。FXyz Sampler是一个应用程序,用于可视化此库中的大多数可能性。这是绘制函数的示例:
对于其他 3D 形状,请查看库中其余的 3D 复杂形状。
你可以看看VRL Studio,它包括一个很棒的 3D 功能绘图仪等等。
我编写了一个 JavaFX 演示应用程序(嵌入在 swing 中),它可以绘制 3d 点。您可以使用您的函数创建/计算一些 3d 点,而不仅仅是绘制它。查看生成点的 StarterFrame 类。更多的点意味着更详细的情节。也许这可以帮助您自己编写一些东西。否则我会推荐一个图书馆。
JavaFX 没有绘制 3d 图形的内置机制。您必须使用 3rd 方库。