2017-08-10 2 views
1

Ich habe versucht, die linke Hälfte eines planeBuffer mit material.clippingPlanes zu beschneiden. Wenn sich das Objekt in der Mitte mit der Drehung befindet (0,0,0), funktioniert das Clipping.Lokales Clipping von Ebenen basierend auf lokaler Achse

object.material.clippingPlanes = 
[object.getWorldDirection().cross(object.up).normalize(), object.position.z)]; 

aber dieser Code nicht, wenn das Objekt bei einer Nicht-Null-Position mit von Null Drehung ist und der Schnitt nicht ändert, mit der Orientierung des Objekts.

Antwort

2

Von Material.clippingPlanes:

Benutzerdefinierte Zuschneideebenen angegeben als THREE.Plane Objekte in Weltraum.

Da die Flugzeuge in Weltraum sind, werden sie in Ihrem Objekt lokalen Raum nicht orientieren. Sie müssten die Welttransformationsmatrix Ihres Objekts auf die Ebenen anwenden, um sie mit Ihrem Objekt auszurichten.

myMesh.material.clippingPlanes[0].applyMatrix4(myMesh.matrixWorld); 

Beachten Sie, dass, wenn Ihr Netz um sich bewegt, dann würden Sie die ursprüngliche Clippingebene für die Anwendung der neuen matrixWorld von jeder Transformation speichern müssen.

// somehwere else in the code: 
var clipPlane1 = new THREE.Plane(); // however you configure it is up to you 

// later, probably in your render method: 
myMesh.material.clippingPlanes[0].copy(clipPlane1); 
myMesh.material.clippingPlanes[0].applyMatrix4(myMesh.matrixWorld); 
+0

Danke. Ich musste auch das Flugzeug bewegen mit object.material.clippingPlanes [0] .constant - = object.material.clippingPlanes [0] .distanceToPoint (object.position); –

+0

@AmriteshAnand Guter Fang! Danke für das Teilen dieser zusätzlichen Informationen. :) – TheJim01

Verwandte Themen