如何使用数学方程在JavaFX中绘制3d图形,
基本上是2个变量函数,例如:z=2xy
和其他3D数字?
有没有办法在JavaFX中执行此操作,或者我是否需要另一个Java库。
答案 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作为纹理索引:
triangleMesh.getTexCoords().setAll(0,0);
你将拥有你的网格,准备在场景中渲染。
第三方图书馆
您可以查看FXyz库,您将在其中找到SurfacePlotMesh
,其完全如上所述,包括纹理坐标。 FXyz Sampler是一个可视化此库中大多数可能性的应用程序。这是绘制函数的样本:
对于其他3D形状,请查看库中其余的3D复杂形状。
您可以查看VRL Studio,其中包括一个出色的3D功能绘图仪等。
答案 1 :(得分:1)
我编写了一个JavaFX演示应用程序(嵌入在swing中),可以绘制3d点。 您可以使用您的函数创建/计算一些3d点,而不仅仅是绘制它。查看生成点的StarterFrame类。更多点意味着更详细的情节。也许这可以帮助你自己写点东西。否则我会推荐一个图书馆。
答案 2 :(得分:0)
JavaFX没有用于绘制3d图形的内置机制。您必须使用第三方库。