Update picking and raycasting to use pick meshes and calculate accurate Y coordinates based on terrain height

This commit is contained in:
2026-04-29 23:01:06 +02:00
parent 295191a750
commit 942e09ebfb

View File

@@ -9145,7 +9145,7 @@ export class ViewportHost {
}
for (const renderObjects of this.terrainRenderObjects.values()) {
raycastObjects.push(renderObjects.mesh);
raycastObjects.push(...renderObjects.pickMeshes);
}
for (const renderGroup of this.modelRenderObjects.values()) {
@@ -9186,11 +9186,25 @@ export class ViewportHost {
return null;
}
const terrain = this.getDisplayedTerrainState(terrainId);
const sourceHeight =
terrain === null
? null
: sampleTerrainHeightAtWorldPosition(
terrain,
hit.point.x,
hit.point.z,
true
);
return {
terrainId,
point: {
x: hit.point.x,
y: hit.point.y,
y:
terrain === null || sourceHeight === null
? hit.point.y
: terrain.position.y + sourceHeight,
z: hit.point.z
}
};
@@ -9871,8 +9885,8 @@ export class ViewportHost {
]).flat(),
...Array.from(
this.terrainRenderObjects.values(),
(renderObjects) => renderObjects.mesh
),
(renderObjects) => renderObjects.pickMeshes
).flat(),
...Array.from(this.modelRenderObjects.values()),
...this.getBrushPickableObjects()
],