I have a tough problem. First of all, I am really excited to receive your reply. I have found a solution to the problem I asked you half a month ago, but I found some new problems in the process of using Cesium to conduct research. I will discuss them in detail below. Warning: the article is long and messy.

My research direction is Discrete Global Grid Systems, so I used Cesium to draw DQG, a subdivision method proposed by my postgraduate tutor, as shown in the following picture: so beautiful!

But as I narrowed the distance, the problem arose, camera position：Cartesian3.fromDegrees(109, 35,5000000):

If you zoom in a little more, the problem becomes obvious, camera position：Cartesian3.fromDegrees(109, 35, 3000000):

I found out why: the OrientedBoundingBox of these undrawn grids don’t intersect with the six planes of Camera.frustum. But

these boxes are already in the Camera.frustum and why the intersection is -1，means that outside. as shown in the following figure:

The green are the six planes of Camera.frustum. The red is the OrientedBoundingBox of undrawn grids. We’ve seen the red OrintedBoundingBox in the frustum, why the intersection is -1??? The code:

*tile.boundingBox = OrientedBoundingBox.fromRectangle(tile.rectangle, 0.0, 0.0);*

var cullingVolume = camera.frustum.computeCullingVolume(camera.positionWC, camera.directionWC, camera.upWC);

var intersection = cullingVolume.computeVisibility(tile.boundingBox);

the result of intersection is -1.

Finally I found the reason: boundingVolume.intersectPlane was miscalculated.

boundingVolume.intersectPlane in CullingVolume.prototype.cumputeVisibility in CullingVolume.js. The code:

var result = boundingVolume.intersectPlane(Plane.fromCartesian4(planes[k], scratchPlane));

After struggling for days, I finally found the culprit:

Cartesian3.fromCartesian4(coefficients, scratchNormal)

In Plane.fromCartesian4().The Plane.fromCartesian4() source code:

```
Plane.fromCartesian4 = function(coefficients, result) {
```

```
var normal = Cartesian3.fromCartesian4(coefficients, scratchNormal);
```

```
var distance = coefficients.w;
```

```
if (!CesiumMath.equalsEpsilon(Cartesian3.magnitude(normal), 1.0, CesiumMath.EPSILON6)) {
throw new DeveloperError('normal must be normalized.');
}
```

```
if (!defined(result)) {
return new Plane(normal, distance);
}
Cartesian3.clone(normal, result.normal);
result.distance = distance;
return result;
```

};

The Cartesian3.fromCartesian4() source code:

Cartesian3.fromCartesian4 = Cartesian3.clone;

Cartesian3.prototype.clone = function(result) {

return Cartesian3.clone(this, result);

};

Cartesian3.clone = function(cartesian, result) {

if (!defined(cartesian)) {

return undefined;

}

if (!defined(result)) {

return new Cartesian3(cartesian.x, cartesian.y, cartesian.z);

}

```
result.x = cartesian.x;
result.y = cartesian.y;
result.z = cartesian.z;
return result;
```

};

So I added a little code to test Cartesian3.fromCartesian4()’s problems: print coefficients and normal. And their x y z should be the same.

var count = 0;

Plane.fromCartesian4 = function(coefficients, result) {

*//>>includeStart(‘debug’, pragmas.debug);

- Check.typeOf.object(‘coefficients’, coefficients);

*//>>includeEnd(‘debug’);

// test code begin:
- var normal = Cartesian3.fromCartesian4(coefficients, scratchNormal);*
- var distance = coefficients.w;

*console*.log(“coefficients：”);

*console*.log(coefficients);

*console*.log(“normal：”);

*console*.log(normal);*

//>>includeStart(‘debug’, pragmas.debug);
- if (!CesiumMath.equalsEpsilon(Cartesian3.magnitude(normal), 1.0, CesiumMath.EPSILON6)) {

throw new DeveloperError(‘normal must be normalized.’);

}

*//>>includeEnd(‘debug’);
- if (!defined(result)) {

return new Plane(normal, distance);

}

Cartesian3.clone(normal, result.normal);

result.distance = distance;

return result;

};

But their do not have the same x y z. When the screen pixels are 1920x903 :

when the screen pixels are 1280x833 :

The four children QuadTree grid of red rectangle mean that their father gird is intersect or inside with the camera.frustum.

normal = Cartesian3.fromCartesian4(cofficients, result) , I want to know the reason why normal.x != cofficients.x normal.y != cofficients.y

and normal.z != cofficients.z. (However I found that although normal != cofficients, the value of normal is not random. So I think that there must be rules in Cesium)

Please forgive me for disturbing you and my poooooooor English.

Looking forward to your reply.

Zhang Yaoyuan