Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSybren A. Stüvel <sybren@stuvel.eu>2015-07-06 13:20:29 +0300
committerSybren A. Stüvel <sybren@stuvel.eu>2015-07-06 13:20:29 +0300
commitbe07ab58c66edf7368729c286d2dc6afaf76a4b8 (patch)
treea4efcf3e7fcf32dae15f8071ebeaf8c1522d6916 /source/gameengine/Ketsji/KX_CameraActuator.cpp
parent28d712b238af6b270675859d686bd99b16d2083e (diff)
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
Diffstat (limited to 'source/gameengine/Ketsji/KX_CameraActuator.cpp')
-rw-r--r--source/gameengine/Ketsji/KX_CameraActuator.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/source/gameengine/Ketsji/KX_CameraActuator.cpp b/source/gameengine/Ketsji/KX_CameraActuator.cpp
index 4dc30ae1672..3d1802bb2a6 100644
--- a/source/gameengine/Ketsji/KX_CameraActuator.cpp
+++ b/source/gameengine/Ketsji/KX_CameraActuator.cpp
@@ -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];
}