open dialog javafx
Cómo llenar una esfera JavaFX con dos colores (2)
Como @mohsenmadi ha señalado, el color difuso no le permite usar otro color que no sea uno.
Pero puede tener diferentes colores en la esfera al usar una imagen como un mapa difuso.
En base a su primera imagen, he creado esta imagen de textura (llamada diffuse.jpg
y colocada en la misma carpeta que la clase JavaFX):
Puedes crear ahora tu esfera bicolor:
@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);
...
}
Entonces verás esto:
Tenga en cuenta que puede tener algunos efectos secundarios en los polos.
También puede echar un vistazo al proyecto FXyz , una biblioteca con formas complejas JavaFX 3D adicionales, y también opciones de textura complejas.
Por ejemplo, puede usar un mapa de densidad para crear el mismo efecto que desee, pero sin proporcionar la imagen de textura.
En org/fxyz/shapes/primitives
, puede encontrar varias primitivas como SegmentedSphereMesh
.
Al igual que una esfera, puede crear una con el número de divisiones, las divisiones de recorte (0 en este caso para xey), los radios y el centro:
SegmentedSphereMesh sphere = new SegmentedSphereMesh(200,0,0,100,new Point3D(0f,0f,0f));
Ahora puedes definir la función:
Function<Point3D, Number> dens = p->p.y>0?1:0;
y aplicarlo, con el número de colores (2 en este caso):
sphere.setTextureModeVertices3D(2,dens);
Ahora tendrás esto:
Ahora no tendrá efectos secundarios en los polos, y podría modificar esta función fácilmente a otros casos.
Tenga en cuenta que puede agregar crear su propia paleta de colores o jugar con la función HSB en org/fxyz/utils/Palette
.
¿Cómo puedo completar JavaFX una esfera 3D con un degradado lineal como un 2d círculo? Yo trabajo con el JavaFX Scene Builder.
La forma de lograr efectos de gradiente en formas 3D es aplicando material de iluminación y posición de iluminación. No puede simplemente aplicar dos colores que se transforman gradualmente entre sí. Preparé para ti una pequeña aplicación que muestra cómo lograr esto.
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);
}
}
Lo cual te dará esto:
Si cambia la ubicación de la esfera (p. Ej., Usando setTranslateX()
y lo mismo para Y
y Z
), debería notar diferentes efectos de iluminación en él; entonces, lo siguiente que debe comprender es cómo controlar la ubicación de los accesorios de iluminación. ¡Además, las luces pueden tener color! Lo que significa que puedes lograr incluso los efectos de la aurora boreal si quieres ver cosas geniales.
Para aprender un poco más sobre iluminación, cámara y efectos, mira este enlace.