LineSegments2 raycast bug
Description
When a LineSegments2 object is rendered off the screen, the LineMaterial.resolution variable doesn't get updated until the onBeforeRender function is run. This causes raycasters to intersect with the lines incorrectly even when they are not on the screen. It gets resolved once you pan to the line since the resolution gets updated.
Reproduction steps
- Render a line outside of camera view
- If your app has some picking logic that highlights a line that is selected, click anywhere on the screen.
- Once you pan to the line, you will see that it is highlighted.
Code
// code goes here
Live example
- jsfiddle-latest-release WebGLRenderer
- jsfiddle-dev WebGLRenderer
- jsfiddle-latest-release WebGPURenderer
- jsfiddle-dev WebGPURenderer Don't have a live example I can provide
Screenshots
No response
Version
0.168.0
Device
No response
Browser
No response
OS
No response
I think there's a bigger question of what these screenspace thickness lines should do for raycasting when they're off screen - if a line is off screen there's not a clear interpretation of what "screen space" means. And projecting into camera clip space to to perform the raycasting won't necessarily have sensible results.
cc @WestLangley
@rajsunku Can you please provide a live example to demonstrate exactly what you are doing?
I think there's a bigger question of what these screenspace thickness lines should do for raycasting when they're off screen - if a line is off screen there's not a clear interpretation of what "screen space" means. And projecting into camera clip space to to perform the raycasting won't necessarily have sensible results.
I'd agree with this. Anything that is screen-space must be culled if all points are completely offscreen. For speed, we can early out by checking resolution is non-zero.
I'd agree with this. Anything that is screen-space must be culled if all points are completely offscreen.
From a practical perspective I can see needing to be able to interact / raycast with lines that are off screen but I'd be okay changing the function to just cull the lines off screen until there are requests to figure out another solution.
It gets resolved once you pan to the line since the resolution gets updated.
Disabling "frustumCulled" would be a workaround for now, I think.