如何用两种颜色填充 JavaFX 球体

See*_*uD1 2 css java javafx javafx-3d

如何使用线性渐变(如 2d Circle)填充 JavaFX 3D 球体?我使用 JavaFX Scene Builder。

在此处输入图片说明

在此处输入图片说明

Jos*_*eda 5

正如@mohsenmadi 指出的那样,漫反射颜色不允许您使用一种颜色以外的颜色。

但是通过将图像用作漫反射贴图,您可以在球体上使用不同的颜色。

根据您的第一个图像,我创建了这个纹理图像(称为diffuse.jpg,并放置在与 JavaFX 类相同的文件夹下):

漫反射图像

您现在可以创建双色球体:

@Override
public void start(Stage primaryStage) throws Exception {

    // 3D
    Sphere sphere = new Sphere(5);
    PhongMaterial phongMaterial = new PhongMaterial();
    phongMaterial.setDiffuseMap(new Image(getClass().getResource("diffuse.jpg").toExternalForm()));
    sphere.setMaterial(phongMaterial);
    ...
}
Run Code Online (Sandbox Code Playgroud)

所以你会看到这个:

领域

请注意,您可能会对两极产生一些副作用。

您还可以查看FXyz项目,这是一个具有附加 JavaFX 3D 复杂形状和复杂纹理选项的库。

例如,您可以使用密度图来创建您想要的相同效果,但不提供纹理图像。

org/fxyz/shapes/primitives你可以找到几个像元SegmentedSphereMesh

就像一个球体一样,您可以创建一个给出分割数、裁剪分割(在这种情况下 x 和 y 为 0)、半径和中心的球体:

SegmentedSphereMesh sphere = new SegmentedSphereMesh(200,0,0,100,new Point3D(0f,0f,0f));
Run Code Online (Sandbox Code Playgroud)

现在您可以定义函数:

Function<Point3D, Number> dens = p->p.y>0?1:0;
Run Code Online (Sandbox Code Playgroud)

并应用它,颜色数量(在这种情况下为 2):

sphere.setTextureModeVertices3D(2,dens);
Run Code Online (Sandbox Code Playgroud)

现在你将拥有这个:

球体FXyz

现在您不会对极点产生副作用,并且您可以轻松地将此功能修改为其他情况。

请注意,您可以添加创建自己的调色板或在org/fxyz/utils/Palette.