J'ai le code de test suivant, où j'essaie de découper un MeshView avec un cercle. J'ai aussi essayé de placer le meshView dans un groupe puis de l'écrêter, mais ce résultat est un cercle noir.écrêtage de MeshView scalafx/javafx
Existe-t-il un moyen de découper un MeshView, de préférence sans le mettre dans un groupe?
import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene.image.Image
import scalafx.scene.paint.{Color, PhongMaterial}
import scalafx.scene.shape.{TriangleMesh, Circle, MeshView}
import scalafx.scene.{Group, PerspectiveCamera, Scene, SceneAntialiasing}
object Test4 extends JFXApp {
stage = new PrimaryStage {
scene = new Scene(500, 500, true, SceneAntialiasing.Balanced) {
fill = Color.LightGray
val clipCircle = Circle(150.0)
val meshView = new MeshView(new RectangleMesh(500,500)) {
// takes a while to load
material = new PhongMaterial(Color.White, new Image("https://peach.blender.org/wp-content/uploads/bbb-splash.png"), null, null, null)
}
// val meshGroup = new Group(meshView)
meshView.setClip(clipCircle)
root = new Group {children = meshView; translateX = 250.0; translateY = 250.0; translateZ = 560.0}
camera = new PerspectiveCamera(false)
}
}
}
class RectangleMesh(Width: Float, Height: Float) extends TriangleMesh {
points = Array(
-Width/2, Height/2, 0,
-Width/2, -Height/2, 0,
Width/2, Height/2, 0,
Width/2, -Height/2, 0
)
texCoords = Array(
1, 1,
1, 0,
0, 1,
0, 0
)
faces = Array(
2, 2, 1, 1, 0, 0,
2, 2, 3, 3, 1, 1
)
Je vais jeter un coup d'œil aux opérations CSG. Si je comprends bien votre réponse, vous dites que cela ne peut pas être fait. – workingdog
L'écrêtage 3D sera une opération booléenne CSG, donc cela peut être fait ... Je n'ai pas dit qu'il ne pouvait pas. Dans la question que je mentionne, vous avez un exemple d'opérations booléennes entre des formes 3D, en utilisant [JCSG] (https://github.com/miho/JCSG) et [FXyz] (https://github.com/Birdasaur/FXyz) bibliothèques. –
Je regarde toujours les opérations booléennes CSG, j'utilisais déjà FXyz et je ne connaissais pas CSG. Les deux bibliothèques sont géniales. Depuis clip() sur un maillage ne fonctionne pas sans détruire le matériel, je suis venu avec une solution de contournement pour faire un écrêtage en utilisant Shape.subtract. Cela fonctionne presque mais il y a un problème. Comment obtenir les points de limite externes d'un maillage en séquence. Je ne comprends pas le séquençage générique des points dans un maillage complexe comme le tissu, et ne peut donc pas élaborer une formule pour choisir seulement les points dont j'ai besoin pour créer un polygone. https://gist.github.com/anonymous/49977e526a501905d1fb – workingdog