JavaFX 2D shapes in 3D space

2019-07-18 04:36发布

问题:

I know that if I rotate an object, which extends javafx.scene.shape.Shape, I can transform it into 3D space, even though it was primarily designed to be in 2D (at least as far as I know).

Let's say I have a 3D scene (perspective camera and depth buffer are used), where various MeshViews occur. Some are used for areas, others for lines. In both cases those shapes must be triangulated in order to draw them with a TriangleMesh, which is often nontrivial.

Now when I change the drawing of these lines to use the Polyline class, the performance collapse is horrible and there a strange artefacts. I thought I could benefit from the fact, that a polyline has less vertices and the developer doesn't have to triangulate programmatically.

Is it discouraged to use shapes extending javafx.scene.shape.Shape within 3D space? How're they drawn internally?

回答1:

If the question is "should I use 2D Shape objects in 3D space?" in JavaFX then the answer is No because you will get all terrible performance that you are seeing. However it sounds like you are trying to make up for JavaFX's lack of a 3D PolyLine object using 2D objects and rotating them in 3D space. If that is true, instead use the free open-source F(X)yz library:

http://birdasaur.github.io/FXyz/

For example the PolyLine3D class which allows you to simply specify a list of Point3Ds and it will connect them for you:

/src/org/fxyz/shapes/composites/PolyLine3D.java

and you can see example code on how to use it in the test directory:

/src/org/fxyz/tests/PolyLine3DTest.java