In p5.Camera.slerp, change the eye-center distance interpolation to be logarithmically based #6259
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Resolves: #6257
Changes:
In the p5.Camera.slerp() logic, the interpolation of the distance between the viewpoint and the center used linear interpolation.
However, with this interpolation method, there are problems such as the camera breaking when it goes out of range.
Also, when applied to infinite loop animation, there is also the problem that the animation does not connect smoothly.
Furthermore, since orbitControl() changes the distance logarithmically, it is not very compatible with it.
From the above, I came to the conclusion that it is better to use logarithmic interpolation instead of linear interpolation for the distance interpolation method.
Also, along with that, added the content about distance interpolation in the unit test.
Screenshots of the change:
logarithmic interpolation
2023-07-09.00-37-48.mp4
Although it is a subtle difference, slerp2 (version with specification change) is smoother.
In addition, there is almost no difference in appearance in sketches such as resetting orbitControl().
PR Checklist
npm run lint
passes