我正在 SketchUp 中编写导出脚本 (ruby),但在 Three.js 端应用相同的转换时遇到问题,因此对象在 Three.js 中的旋转与它们在 SketchUp 中的旋转相同。
我可以使用 SketchUp Transformation 类读取旋转:http ://www.sketchup.com/intl/en/developer/docs/ourdoc/transformation.php
我可以从传递给我的 Three.js 代码的旋转组件中获取这些值。都是 X、Y、Z 形式的向量
xaxis: 0.0157771536190692,-0.0,-0.0199058138160762
yaxis: -0.0199058138160762,0.0,-0.0157771536190692
zaxis: 0.0,0.0254,-0.0
origin: 1.4975125146729,0.0,-1.25735397455338
如果我只是将值从原点复制到 Object3D.position,则对象定位正确。但我不知道如何将 xaxis、yaxis 和 zaxis 值应用于 Object3D.rotation。
Three.js 有多种旋转模型的方法,通过矩阵操作、四元数、角度、弧度等等。但是如何使用这些轴值设置对象旋转?
编辑:
SketchUp Transformation 还提供了一个 .to_a (到数组)方法,我认为它应该返回一个 16 元素矩阵。我尝试在 Three.js 中使用它:
// tm is from SketchUp:Transformation to_a
var tm = "0.621147780278315,0.783693457325836,-0.0,0.0,-0.783693457325836,0.621147780278315,0.0,0.0,0.0,0.0,1.0,0.0,58.9571856170433,49.5021249824165,0.0,1.0";
tm = tm.split(",");
for (var i = 0; i < tm.length; i++) {
tm[i] = tm[i] * 1.0;
}
var matrix = new THREE.Matrix4(tm[0], tm[1], tm[2], tm[3], tm[4], tm[5], tm[6], tm[7], tm[8], tm[9], tm[10], tm[11], tm[12], tm[13], tm[14], tm[15]);
obj.applyMatrix(matrix);
然而,这会导致一团糟,所以仍然有问题。