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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-04-13 13:08:43 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-04-13 13:08:43 +0400
commit59377695bd21693b9a5a587890f6d70ee5d8b1ff (patch)
tree24d1b3b478487d6ffcb3acd6e4e65cd681b2bf38 /intern/cycles/util
parent1cf0358a334cf4cfce207d03ae2db2a93f2cd32c (diff)
Fix #30929: cycles rendering of object with scale 0 on some axis did not work
correct with instancing. Actually such object will not work in many places, e.g. transforming vertices in edit mode doesn't work and textures will be misapplied in Blender Internal, so these should be avoided.
Diffstat (limited to 'intern/cycles/util')
-rw-r--r--intern/cycles/util/util_transform.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/intern/cycles/util/util_transform.cpp b/intern/cycles/util/util_transform.cpp
index 8c5eac2cbb9..61bc36ae888 100644
--- a/intern/cycles/util/util_transform.cpp
+++ b/intern/cycles/util/util_transform.cpp
@@ -134,8 +134,16 @@ Transform transform_inverse(const Transform& tfm)
R.T = transform_identity();
M.T = tfm;
- if(!transform_matrix4_gj_inverse(R.M, M.M))
- return transform_identity();
+ if(!transform_matrix4_gj_inverse(R.M, M.M)) {
+ /* matrix is degenerate (e.g. 0 scale on some axis), ideally we should
+ never be in this situation, but try to invert it anyway with tweak */
+ M.M[0][0] += 1e-8f;
+ M.M[1][1] += 1e-8f;
+ M.M[2][2] += 1e-8f;
+
+ if(!transform_matrix4_gj_inverse(R.M, M.M))
+ return transform_identity();
+ }
return R.T;
}