When you click two point on viewer, the globe will be dug a hole. In my case, I want to dig a hole on 3dtileset, too. But in the follow code, 3dtileset didn’t work, how should I do?
This is because clipping planes are relative to the root tile’s transform. This is described on the documentation page:
https://cesiumjs.org/Cesium/Build/Documentation/ClippingPlaneCollection.html?classFilter=Clippin
So for example, if you set the the clipping plane at (0,0,0), with a normal facing in the positive X axis, it would clip half the tileset (wheras the same plane would clip half the globe). The easiest way to get a plane to clip a tileset and the globe in the same location is to add a modelMatrix to the ClippingPlaneCollection on the tileset to reverse this transformation to make its coordinate relative to the center of the earth:
tileset.clippingPlanes = new Cesium.ClippingPlaneCollection({
planes : clippingPlanes,
edgeColor: Cesium.Color.WHITE,
modelMatrix: Cesium.Matrix4.inverse(tileset.root.computedTransform, new Cesium.Matrix4())
});
``
You might also want to use viewer.camera.pickEllipsoid instead of pickPosition to get more accurate results when not using terrain.
Here’s what the new Sandcastle with these changes looks like.
Hello,
I have been trying to adapt this sandcastle so that the user can draw the hole as a polygon and therefore cut the 3Dtileset in any shape he wants, but I can't get it to work. I've only changed the "hole" function.
Is this because clipping planes are not supported (except for rectangles and triangles) ?
Many thanks for your response, I'm really stucked on this one!
Hello World.html (4.04 KB)
I think it just might be that that original example was computing the planes based on the assumption that it will always describe a rectangle. You can certainly have a combination of many clipping planes to describe more arbitrary shapes. Here’s a Sandcastle example showing this:
You might also find this thread useful which was doing a similar thing, clipping planes made out of arbitrary polygons:
https://groups.google.com/d/msg/cesium-dev/Jgc8BSoCAfc/FJzvazhWCgAJ
Although the tileset in the examples seems to no longer be accessible.
Hi Omar and thank you for your response, with both examples I managed to make it work!
If anyone is interested, here is the updated Sandcastle that lets the user cut the tileset in any (convex) shape he wants: