summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorleo2006-02-04 02:38:46 +0000
committerleo2006-02-04 02:38:46 +0000
commit5672dc0cc217ae4b4b10050e3b43b911a71148d7 (patch)
tree772dedd5340cb2f059354951f049de2beeade817 /common
parent0b872fb3594ce4c284066d138922332e3a7f02d7 (diff)
Fixed a bug importing LDraw files with pieces scaled.
git-svn-id: http://svn.leocad.org/trunk@465 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'common')
-rw-r--r--common/matrix.cpp19
1 files changed, 14 insertions, 5 deletions
diff --git a/common/matrix.cpp b/common/matrix.cpp
index 8f19cbd..90b92f7 100644
--- a/common/matrix.cpp
+++ b/common/matrix.cpp
@@ -323,14 +323,23 @@ void Matrix::FromLDraw (const float *f)
float trans[16] = { 1,0,0,0, 0,0,-1,0, 0,1,0,0, 0,0,0,1 };
float t[16] = { 1,0,0,0, 0,0,1,0, 0,-1,0,0, 0,0,0,1 };
- m[0] = f[3]; m[1] = f[6]; m[2] = f[9];
- m[4] = f[4]; m[5] = f[7]; m[6] = f[10];
- m[8] = f[5]; m[9] = f[8]; m[10]= f[11];
- m[12]= f[0]/25; m[13]= f[1]/25; m[14]= f[2]/25;
+ m[0] = f[3]; m[1] = f[6]; m[2] = f[9]; m[3] = 0.0f;
+ m[4] = f[4]; m[5] = f[7]; m[6] = f[10]; m[7] = 0.0f;
+ m[8] = f[5]; m[9] = f[8]; m[10]= f[11]; m[11] = 0.0f;
+ m[12]= f[0]/25; m[13]= f[1]/25; m[14]= f[2]/25; m[15] = 1.0f;
+
+ // Normalize.
+ float inv;
+ inv = 1.0f / sqrtf(m[0]*m[0] + m[4]*m[4] + m[8]*m[8]);
+ m[0] *= inv; m[4] *= inv; m[8] *= inv;
+ inv = 1.0f / sqrtf(m[1]*m[1] + m[5]*m[5] + m[9]*m[9]);
+ m[1] *= inv; m[5] *= inv; m[9] *= inv;
+ inv = 1.0f / sqrtf(m[2]*m[2] + m[6]*m[6] + m[10]*m[10]);
+ m[2] *= inv; m[6] *= inv; m[10] *= inv;
matmul (m, m, t);
matmul (trans, trans, m);
- memcpy (&m[0], &trans[0], sizeof(m));
+ memcpy (&m[0], &trans[0], sizeof(m));
}
void Matrix::ToLDraw (float *f) const