|
3 | 3 | var TMP_VEC = XML3D.math.vec3.create(); |
4 | 4 | var TMP_QUAT = XML3D.math.quat.create(); |
5 | 5 | var mat4 = XML3D.math.mat4; |
| 6 | + var quat = XML3D.math.quat; |
6 | 7 |
|
7 | 8 | Xflow.registerOperator("xflow.createTransform", { |
8 | 9 | outputs: [{type: 'float4x4', name: 'result'}], |
|
16 | 17 | var dest = result.subarray(i * 16); |
17 | 18 | mat4.identity(dest); |
18 | 19 | translation && mat4.translate(dest, dest, info.iterFlag[0] ? translation.subarray(i*3) : translation); |
19 | | - center && mat4.translate(dest, dest, info.iterFlag[0] ? center.subarray(i*3) : center); |
| 20 | + center && mat4.translate(dest, dest, info.iterFlag[3] ? center.subarray(i*3) : center); |
20 | 21 | if (rotation) { |
21 | | - mat4.fromRotationTranslation(TMP_MATRIX, info.iterFlag[1] ? rotation.subarray(i*4) : rotation, [0, 0, 0]); |
| 22 | + mat4.fromQuat(TMP_MATRIX, info.iterFlag[1] ? rotation.subarray(i*4) : rotation); |
22 | 23 | mat4.multiply(dest, dest, TMP_MATRIX); |
23 | 24 | } |
24 | | - if (scaleOrientation) { |
25 | | - mat4.fromRotationTranslation(TMP_MATRIX, info.iterFlag[4] ? scaleOrientation.subarray(i*4) : scaleOrientation, [0, 0, 0]); |
26 | | - mat4.multiply(dest, dest, TMP_MATRIX); |
27 | | - } |
28 | | - scale && mat4.scale(dest, dest, info.iterFlag[2] ? scale.subarray(i*3) : scale); |
29 | | - if (scaleOrientation) { |
30 | | - XML3D.math.quat.copy(TMP_QUAT, info.iterFlag[4] ? scaleOrientation.subarray(i*4) : scaleOrientation) |
31 | | - mat4.fromRotationTranslation(TMP_MATRIX, XML3D.math.quat.negate(TMP_QUAT, TMP_QUAT), [0, 0, 0]); |
32 | | - mat4.multiply(dest, dest, TMP_MATRIX); |
| 25 | + if (scale) { |
| 26 | + if (scaleOrientation) { |
| 27 | + quat.copy(TMP_QUAT, info.iterFlag[4] ? scaleOrientation.subarray(i*4) : scaleOrientation) |
| 28 | + mat4.fromQuat(TMP_MATRIX, TMP_QUAT); |
| 29 | + mat4.multiply(dest, dest, TMP_MATRIX); |
| 30 | + } |
| 31 | + mat4.scale(dest, dest, info.iterFlag[2] ? scale.subarray(i * 3) : scale); |
| 32 | + if (scaleOrientation) { |
| 33 | + quat.invert(TMP_QUAT, TMP_QUAT); |
| 34 | + mat4.fromQuat(TMP_MATRIX, TMP_QUAT); |
| 35 | + mat4.multiply(dest, dest, TMP_MATRIX); |
| 36 | + } |
33 | 37 | } |
34 | 38 |
|
35 | 39 | center && mat4.translate(dest, dest, XML3D.math.vec3.negate(TMP_VEC, info.iterFlag[3] ? center.subarray(i*3) : center)); |
|
0 commit comments