diff --git a/CHANGES.md b/CHANGES.md index ed7d1095ee53..1168904e1024 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,6 +8,7 @@ Change Log #### Fixes :wrench: * Fixed bug causing billboards and labels to appear the wrong size when switching scene modes [#6745](https://github.com/AnalyticalGraphicsInc/cesium/issues/6745) +* Fixed a bug that was preventing 3D Tilesets on the opposite side of the globe from being occluded [#6714](https://github.com/AnalyticalGraphicsInc/cesium/issues/6714) ### 1.47 - 2018-07-02 diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 7a23ad11fb62..7e4a7c0cd0e1 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -184,3 +184,4 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to contribute to Cesiu * [Jonathan Puckey](https://github.com/puckey) * [Mark Erikson](https://github.com/markerikson) * [Hannah Bollar](https://github.com/hanbollar) +* [Brandon Barker](https://github.com/ProjectBarks) \ No newline at end of file diff --git a/Source/Scene/DepthPlane.js b/Source/Scene/DepthPlane.js index 4df50d2663ef..cb1b0e09a19f 100644 --- a/Source/Scene/DepthPlane.js +++ b/Source/Scene/DepthPlane.js @@ -51,15 +51,23 @@ define([ } var depthQuadScratch = FeatureDetection.supportsTypedArrays() ? new Float32Array(12) : []; + var scratchRadii = new Cartesian3(); var scratchCartesian1 = new Cartesian3(); var scratchCartesian2 = new Cartesian3(); var scratchCartesian3 = new Cartesian3(); var scratchCartesian4 = new Cartesian3(); function computeDepthQuad(ellipsoid, frameState) { - var radii = ellipsoid.radii; + var radii = Cartesian3.clone(ellipsoid.radii, scratchRadii); var p = frameState.camera.positionWC; + // Where did this magical number come from? It's how far a GroundPrimitive will be extruded below the surface + // of the Earth. This effectively pushes the depth plane farther from the camera so that classifications on + // 3D Tiles do not intersect the depth plane. This can be removed when depth testing is enabled by default. + radii.x -= 11000.0; + radii.y -= 11000.0; + radii.z -= 11000.0; + // Find the corresponding position in the scaled space of the ellipsoid. var q = Cartesian3.multiplyComponents(ellipsoid.oneOverRadii, p, scratchCartesian1); diff --git a/Source/Scene/Scene.js b/Source/Scene/Scene.js index 6bc3a71c66d4..5572b52d3447 100644 --- a/Source/Scene/Scene.js +++ b/Source/Scene/Scene.js @@ -2314,6 +2314,9 @@ define([ if (clearGlobeDepth) { clearDepth.execute(context, passState); + if (useDepthPlane) { + depthPlane.execute(context, passState); + } } if (!environmentState.useInvertClassification || picking) { @@ -2431,10 +2434,6 @@ define([ scene._stencilClearCommand.execute(context, passState); } - if (clearGlobeDepth && useDepthPlane) { - depthPlane.execute(context, passState); - } - us.updatePass(Pass.OPAQUE); commands = frustumCommands.commands[Pass.OPAQUE]; length = frustumCommands.indices[Pass.OPAQUE];