如何在 JavaFX 中填充具有线性渐变(如 2d 圆)的 3D 球体? 我使用 JavaFX Scene Builder。
最佳答案
正如@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 复杂形状以及复杂纹理选项的库。
例如,您可以使用密度贴图来创建您想要的相同效果,但无需提供纹理图像。
在 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);
现在你将拥有:
现在你不会对两极产生副作用,你可以很容易地修改这个函数以适应其他情况。
请注意,您可以添加创建自己的调色板或使用 org/fxyz/utils/Palette
下的 HSB 函数。
关于java - 如何用两种颜色填充 JavaFX 球体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30966124/