I think that there are two issues:

1: The `camera.getPickRay`

function expects the *window* position (and not the clicked position) as its argument. So the line for computing the picking ray should be

```
const ray = viewer.camera.getPickRay(event.position);
```

An aside: When trying to visualize the clicked point, note that `scene.pickPosition`

already *does* return the world position. So you could just visualize that:

```
viewer.entities.add({
position: clickedPoint, // Use clickedPoint here
point: {
color: Cesium.Color.BLUE,
pixelSize: 10,
},
});
```

But your goal seemed to be to actually compute the intersection *manually*.

2: When you want to compute the intersection between the picking ray and the plane, you have to take the position of the plane into account. Note that the `plane`

object itself is only a *mathematical description* of the plane. It is *not* the object that you see on the screen. The object that you see on the screen is the *entity* that is created by calling

```
viewer.entities.add({
position: planePosition,
plane: {
plane: plane,
...
```

And this entity uses the `planePosition`

to compute the *visual representation of the plane*, oriented properly for that position on the globe.

Or to put it that way: When you compute the `ray`

, then this refers to what you see on the screen. And one could think that this ray intersects the plane. But it does not really intersect the `plane`

, but only the *visual representation* of that plane.

There are different ways to handle this. Generally, you have to make sure that the intersection test that is done with `IntersectionTests.rayPlane`

takes place in the right space or coordinate system.

One possible solution is:

- Transform the ray into the space of the actual
`plane`

object
- Perform the intersection test
- Transform the intersection point back into the space of the
*visual representation* of the plane

I have added this in the following sandcastle. But with a **disclaimer**: I did not follow all the computations that you did there (and I think that adding the `planePosition`

and the `worldNormal`

does not seem to make much sense). And there are certainly easier and more elegant solutions for this. As I said: Maybe you can just use the `clickedPoint`

directly. You could also try to move the `plane`

object to the desired space, and add the plane entity at a position of (0,0,0). But this sandcasle shows the solution that I described abve, just to illustrate the maths, and the point of bringing the `ray`

and the `plane`

object into the same space.