mrdoob / three.js

JavaScript 3D Library.
https://threejs.org/
MIT License
102.55k stars 35.37k forks source link

LineSegments2 raycast bug #29666

Open rajsunku opened 2 weeks ago

rajsunku commented 2 weeks ago

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

  1. Render a line outside of camera view
  2. If your app has some picking logic that highlights a line that is selected, click anywhere on the screen.
  3. Once you pan to the line, you will see that it is highlighted.

Code

// code goes here

Live example

Screenshots

No response

Version

0.168.0

Device

No response

Browser

No response

OS

No response

gkjohnson commented 2 weeks ago

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

WestLangley commented 2 weeks ago

@rajsunku Can you please provide a live example to demonstrate exactly what you are doing?