SketchUp でエクスポート スクリプト (ルビー) を作成していますが、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 (to array) メソッドも提供します。これは 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);
ただし、これは完全な混乱を招くため、まだ何か問題があります。