Hi,
I found a way to make RayHelper update in an unexpected way: reassigning the underlying ray’s origin vector (instead of updating it in place).
Playground: https://www.babylonjs-playground.com/#ZHDBJ#56
Looking at the source for RayHelper, the reason this happens seems pretty clear; the _renderPoints array is only updated inside of show().
Suspect this must be a known behavior and not considered something that needs to be fixed. (Reassigning the ray origin seems like a bad idea in most cases anyway.)
I’m mostly just curious as to why RayHelper needs/wants to store the two points in the _renderPoints array instead of updating the line mesh based off of the ray itself (in _render() in a new array).
Hey!
it is more for GC protection. we do not want to recreate arrays during rendering
OK. Thanks @Deltakosh!
GC concerns makes sense.
Would you consider copying from ray.origin to _renderPoints[0] in the _render() function? (around this line in the source)
Something like:
point.copyFrom(ray.direction);
point.scaleInPlace(len);
point.addInPlace(ray.origin);
// ***** Add here: ********************************
// ***** Make sure first point is synced up *****
this._renderPoints[0].copyFrom(ray.origin);
Mesh.CreateLines("ray", this._renderPoints, this._scene, true, this._renderLine);
Or would that be too much work to protect too few cases?
Sorry to obsess over this. It’s just that I originally assumed I could update the ray-helper ray at will–I see now that using ‘attach to mesh’ is a better way to go.
I will consider it gladly
wanna do a PR?
Excellent. Yes, I’ll do a pull request for this. Thanks.
1 Like