我想知道 Threejs 如何对多个矩阵进行排序?
例如 ,
......
var mesh = new THREE.Mesh( geometry, material );
mesh.position.set( 0, 20, 0 ); // T , transform matrix
mesh.rotation.set( 0, Math.PI, 0 );//R , rotation matrix
mesh.scale.set( 1, 1, 10 );//S , scale matrix
那么,twojs如何组合三个矩阵呢?它将根据我设置的值顺序(在我的示例中,它是 TRS ,所以最终矩阵应该 T*R*S )或固定顺序(例如,它始终使用 SRT 排序,最终矩阵是 S*R*T ) ?
只要网格属性“matrixAutoUpdate”为 true,并且您只希望按比例、旋转和平移(典型)顺序排列,您就可以像之前那样指定参数。
如果您需要更复杂的东西,例如一系列特定的平移和旋转,那么您应该将matrixAutoUpdate设置为false并自己计算矩阵。
重要提示:使用矩阵乘法函数时,必须按“相反”顺序执行。例如,如果您想定位肢体,那么从逻辑上讲您会:
1)进行局部旋转(例如手臂上/下)
2)相对于其偏移移动肢体(将其放在其关节处)
3)随着身体旋转而旋转
4)移动到身体偏移
实际操作将相反进行:
arm_mesh.matrixAutoUpdate = false;
var mat4: THREE.Matrix4 = new THREE.Matrix4();
var arm_matrix = arm_mesh.matrix;
arm_matrix.identity(); // reset
arm_matrix.multiply(mat4.makeTranslation(body_pos.x, body_pos.y, body_pos.z));
arm_matrix.multiply(mat4.makeRotationFromQuaternion(body_rotation));
arm_matrix.multiply(mat4.makeTranslation(arm_offset.x, arm_offset.y, arm_offset.z));
arm_matrix.multiply(mat4.makeRotationFromEuler(new THREE.Euler(arm_angle, 0, 0)));
当然,这并没有利用或解释父母/孩子的关系。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)