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

标签 java css javafx javafx-3d

如何在 JavaFX 中填充具有线性渐变(如 2d 圆)的 3D 球体? 我使用 JavaFX Scene Builder。

enter image description here

enter image description here

最佳答案

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

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

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

diffuse image

你现在可以创建你的双色球体了:

@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);
    ...
}

所以你会看到这个:

sphere

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

您还可以查看 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);

现在你将拥有:

Sphere FXyz

现在你不会对两极产生副作用,你可以很容易地修改这个函数以适应其他情况。

请注意,您可以添加创建自己的调色板或使用 org/fxyz/utils/Palette 下的 HSB 函数。

关于java - 如何用两种颜色填充 JavaFX 球体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30966124/

相关文章:

java - 一种方法会引发错误,而另一种方法不会引发错误

java - 将表格拆分为几页

javascript - JQuery .extend() 和 Javascript 类

css - 在随字母高度缩放的跨度内垂直对齐字母

css - 更改导航栏图像的 CSS 以适应 IE

multithreading - JavaFX TableView 更新频繁

java - 在 Android 应用程序中向文本字段添加双边框

c# - 从 Java 调用 .NET 程序集 : JVM crashes

java - 更新 Maven 项目时出现空参数错误

javafx - JavaFX 和 Vaadin 的区别