正如@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);
...
}
所以你会看到这个:
请注意,您可能会对手杖产生一些副作用。
您还可以查看FXyz项目,一个具有附加 JavaFX 3D 复杂形状以及复杂纹理选项的库。
例如,您可以使用密度图来创建所需的相同效果,但无需提供纹理图像。
Under org/fxyz/shapes/primitives
你可以找到几个原语,比如SegmentedSphereMesh
.
就像一个球体一样,您可以创建一个球体,并给出划分数、裁剪划分(在本例中 x 和 y 为 0)、半径和中心:
SegmentedSphereMesh sphere = new SegmentedSphereMesh(200,0,0,100,new Point3D(0f,0f,0f));
现在您可以定义该函数:
Function<Point3D, Number> dens = p->p.y>0?1:0;
并应用它,并指定颜色数量(本例中为 2):
sphere.setTextureModeVertices3D(2,dens);
现在你将得到这个:
现在您不会对两极产生副作用,并且您可以轻松地将此函数修改为其他情况。
请注意,您可以添加创建自己的颜色调色板或使用下面的 HSB 功能org/fxyz/utils/Palette
.