2014-01-24 2 views
5

세슘의 gltf 가지를 사용하며 비행기의 3D 모델을 표시하고 싶습니다. 이렇게하려면 dataSources에로드하고 추가하는 czmlDataSource를 만듭니다.세슘에서 unitQuaternion czml 속성을 올바르게 사용하는 방법

문제는 내가 방향 quaternion을 계산하여 바닥에 평행 한 평면을 주어진 lat, lon, alt 북쪽에 기본적으로 놓는 방법을 알아낼 수 없다는 것입니다. .

var geoPosition = new Cesium.Cartographic(Cesium.Math.toRadians(inputPosition.lon), Cesium.Math.toRadians(inputPosition.lat), inputPosition.alt); 
    var cartesianPosition = Cesium.Ellipsoid.WGS84.cartographicToCartesian(geoPosition); 

    var euler = [cartesianPosition.x, cartesianPosition.y, cartesianPosition.z]; 
    var qx = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_X, euler[0]); 
    var qy = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Y, euler[1]); 
    var qz = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Z, euler[2]); 
    var qt = Cesium.Quaternion.multiply(qz, qy); 
    var q = Cesium.Quaternion.multiply(qt, qx); 
    Cesium.Quaternion.normalize(q, q); 

var czmlSrc = [{ 
     "orientation": { 
      "epoch": "2012-08-04T16:00:00Z", 
      "interpolationAlgorithm": "LINEAR", 
      "interpolationDegree": 1, 
      "unitQuaternion": [0, q.x,q.y,q.z,q.w, 
          3600, q.x,q.y,q.z,q.w] 
     } 
    }]; 

답변

6

CZML 현재 가지고 : (피치, 롤 내가 제목을 변경하는 방법을 모른다) 여기

내가 내 실제 사원 수를 계산하는 일이지만, 3D 모델은 올바른 방향으로되지 않습니다 방향은 "세슘"관례와 비교하여 "뒤로". 그래서 CZML로 작업한다면 실제로 방향의 공액을 원합니다. 우리는 몇 달 안에 주요 CZML 업데이트에서이 문제를 해결할 계획을 가지고 있지만 기존의 모든 문서를 현재 형식으로 손상시키고 싶지는 않습니다. 업데이트를 수행 할 때 계획은 이전 버전과 호환되도록 시도하고 기존 CZML을 계속 사용할 예정입니다.

+0

이 답변을 업데이트해야합니까? – emackey

2
var C3 = Cesium.Cartesian3 
var Q = Cesium.Quaternion 
// radians everywhere 
var q =  Q.fromAxisAngle(C3.UNIT_X, -o.pitch    ) // or maybe roll first? 
Q.multiply(q, Q.fromAxisAngle(C3.UNIT_Y, -o.roll    ), q) 
Q.multiply(q, Q.fromAxisAngle(C3.UNIT_Z, o.heading - Math.PI/2), q) 
Q.multiply(q, Q.fromAxisAngle(C3.UNIT_Y, o.lat  - Math.PI/2), q) 
Q.multiply(q, Q.fromAxisAngle(C3.UNIT_Z, -o.lon    ), q) 
Q.conjugate(q, q) 

czml.process([{ 
    position : { cartographicRadians: [o.lon, o.lat, 0] } 
    , orientation: { unitQuaternion: [q.x, q.y, q.z, q.w] } 
    , model  : { gltf: model.key + '.gltf' } 
}]) 

여기에 많은 계산이 있습니다. 이것이 최적화 될 수 있는지 그리고 어떻게 최적화 될 수 있는지 알지 못한다.

관련 문제