BGE Fix T45207: Camera actuator shakes with low height
The camera-aiming code was using a near-zero-length cross product, which caused oscillations. Thresholding on the cross product length seems to fix this. Reviewers: lucky3, Matpi, lordloki Reviewed By: lordloki Projects: #game_engine Differential Revision: https://developer.blender.org/D1387
This commit is contained in:
parent
28d712b238
commit
be07ab58c6
@ -290,11 +290,15 @@ bool KX_CameraActuator::Update(double curtime, bool frame)
|
||||
|
||||
/* only for it lies: cross test and perpendicular bites up */
|
||||
if (inp < 0.0f) {
|
||||
if (fp1[0] * fp2[1] - fp1[1] * fp2[0] > 0.0f) {
|
||||
/* Don't do anything if the cross product is too small.
|
||||
* The camera up-axis becomes unstable and starts to oscillate.
|
||||
* The 0.01f threshold is arbitrary but seems to work well in practice. */
|
||||
float cross = fp1[0] * fp2[1] - fp1[1] * fp2[0];
|
||||
if (cross > 0.01f) {
|
||||
from[0] -= fac * fp1[1];
|
||||
from[1] += fac * fp1[0];
|
||||
}
|
||||
else {
|
||||
else if (cross < -0.01f) {
|
||||
from[0] += fac * fp1[1];
|
||||
from[1] -= fac * fp1[0];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user