2015-06-21 5 views

ответ

3

Как @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.

Подобно сфере вы можете создать один дающее количество делений, на полях подразделения (0 в этом случае для й и у), то radiuos, и центр:

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

Теперь вы не будете иметь побочные эффекты на полюсах, и вы могли бы изменить эту функцию легко и в других случаях.

Обратите внимание, что вы можете добавить создание собственной палитры цветов или играть с функцией HSB под номером org/fxyz/utils/Palette.

0

Путь к достижению градиентных-подобных эффектов на 3D-форм является путем применения освещения материала и положение освещения. Вы не можете просто применить два цвета, которые постепенно преобразуются друг в друга. Я приготовил для вас небольшое приложение, которое показывает, как это сделать.

public class ShadedSphere extends Application { 
    public void start(Stage stage) { 
    StackPane layout = new StackPane(); 
    layout.setPrefSize(300, 300); 

    Scene scene = new Scene(layout); 
    createScene(scene); 

    stage.setScene(scene); 
    stage.show(); 
    } 

    private void createScene(Scene scene) { 
    PhongMaterial material = new PhongMaterial(); 
    material.setDiffuseColor(Color.ORANGE); 
    material.setSpecularColor(Color.BLACK); 

    Sphere sphere = new Sphere(100); 
    sphere.setMaterial(material); 

    Pane root = (Pane) scene.getRoot(); 
    root.getChildren().add(sphere); 
    } 

    public static void main(String[] args) { 
    launch(args); 
    } 
} 

Который даст вам: enter image description here

Если изменить расположение сферы (например, с использованием setTranslateX() и то же самое для Y и Z), вы должны заметить различные эффекты освещения на нем; так что следующая вещь для вас, чтобы понять, как контролировать расположение осветительных приборов. Кроме того, свет может иметь цвет! Это означает, что вы можете достичь эффекта «Северного сияния», если хотите увидеть классные вещи.

Чтобы узнать немного больше о освещения, камеры и эффектов, see this link.

Смежные вопросы