2013-07-05 3 views
0

SketchUp에 내보내기 스크립트 (루비)를 쓰고 있는데 객체가 가지도록 Three.js 측면에서 동일한 변환을 적용하는 데 문제가 있습니다. SketchUp에 나타나는 Three.js에서의 동일한 회전.Sketchup 변환을 Three.js 회전 + 비율 + 위치 또는 행렬로 변환

나는 스케치 변환 클래스를 사용하여 회전을 읽을 수 있습니다 http://www.sketchup.com/intl/en/developer/docs/ourdoc/transformation.php

나는 내 Three.js를 코드에 전달 회전 된 구성 요소에서 값이 종류를 얻을 수 있습니다. 모든 X, Y 형태의 그림, Z I 단지 Object3D.position을 원점에서의 값을 복사하면

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.rotation에 xaxis, yaxis 및 zaxis 값을 적용하는 방법을 알지 못합니다.

Three.js에는 행렬 조작, 쿼터니온, 각도, 라디안 및 기타 등을 통해 모델을 회전하는 다양한 방법이 있습니다. 그러나 이러한 축 값을 사용하여 객체 회전을 설정하는 방법은 무엇입니까?

EDIT :

스케치 변환은 또한 I는 16 엘리먼트 행렬을 반환하기로 생각하는 방법 (배열)를 .to_a을 제공한다. 나는 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 변환 참조)과 행렬 배열 요소의 순서 모두에 있다고 생각합니다. 스케치 업에서 :

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); 

죄송이 코드의 일부 응용 프로그램 특정 논리이지만, 나는 누군가가 비슷한 문제로 실행되는 경우 아이디어는 관계없이 발견 될 수 있다고 생각합니다.

0

SketchUp 변환은 16 요소 행렬을 반환한다고 생각되는 .to_a (배열로) 메소드도 제공합니다.

그것은 당신이 게시 된 이후 오랜만하지만, 여기에 앞으로이 우연히 사람들을위한 유용한 링크입니다했습니다 http://www.martinrinehart.com/models/tutorial/tutorial_t.html