2013-07-05 72 views
0

我在SketchUp寫一個導出腳本(紅寶石),和我在申請中three.js所側相同的變換的麻煩,使物體具有Three.js中的旋轉與SketchUp中的相同。轉換Sketchup的轉型,以three.js所旋轉+規模+位置或矩陣

我可以使用SketchUp的轉型類閱讀旋轉: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。但我不知道如何於x軸,y軸與Z值適用於Object3D.rotation。

three.js所具有的各種方式而旋轉的模型,通過矩陣處理,四元數,角度,弧度和諸如此類的東西。但是如何使用這些軸值設置對象的旋轉?

編輯:

SketchUp的變換還提供了一種.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); 

但是這會導致一團糟,所以還是有問題。

回答

0

基於信息在這裏:http://sketchucation.com/forums/viewtopic.php?f=180&t=46944&p=419606&hilit=matrix#p419606

我能夠建立一個工作Matrix4。我認爲問題是無論是在單元秤(見,一些元件的.to_m轉化率)和矩陣陣列元素的順序。在SketchUp:

tr = transformation.to_a 

trc = [tr[0],tr[8],-(tr[4]),tr[12].to_m, tr[2],tr[10],-(tr[6]),tr[14].to_m, -(tr[1]),-(tr[9]),tr[5],-(tr[13].to_m), 0.0, 0.0, 0.0, 1.0] # the last 4 values are unused in Sketchup 

el.attributes["tm"] = trc.join(",") # rotation and scale matrix 

el.attributes["to"] = convertscale(transformation.origin) # position 

在three.js所

var origin = this.parsevector3(node.getAttribute("to")); 
obj.position = origin; 


var tm = node.getAttribute("tm"); 
    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); 

對不起沒有在代碼中的一些應用程序特定的邏輯,但我認爲這個想法可以不考慮發現,如果有人跑進類似的問題。