0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

unitQuaternionの自動設定

Posted at

そういうわけで、unitQuaternionを設定していないでpositionだけを設定したczmlファイルからorientation{epoch:,unitWQuatenion:}を自動的に設定するスクリプトを作成してみた。

まだ、プログラムとしては不完全で、1個のモデルにしか対応していないのだが、まあそこは拡張できるだろう・・ということで参考に利用していただければいいなあと思う訳である。

4行目あたりの./air.czmlがオリジナルのczmlでこれを
node ff.fs >air2.czml
とかすれば無事unitQuaternionを追加したczmlができあがるというものである。
まあ、オリジナルのpositionはcartographicDegreesで書いてあることが前提
であったり、epochタイプで指定してあるのが前提であるとかいろんな限定があるのだが、あくまで参考である。よろしく
そうか、ソースにあるように、../../Source/Cesium.jsで動くので動かす場所によってここを操作しないといけないということなので、そこもよしなに

ff,js
r=require('requirejs');

var C=r('../../Source/Cesium.js');

fs = require('fs');
fs.readFile('./air.czml', 'utf8', function (err,data) {
  if (err) {
    return console.log(err);
  }
  cz=JSON.parse(data);
  pg=cz[1].position.cartographicDegrees;
  //console.log(pg);
var po=new C.SampledPositionProperty();
var t0=C.JulianDate.fromIso8601(cz[1].position.epoch);
var t1=t0;
len=pg.length/4;
for (var i=0;i<len;i++){
    p1=C.Cartesian3.fromDegrees(pg[i*4+1],pg[i*4+2],pg[i*4+3]);
    t1=C.JulianDate.addSeconds(t0,pg[i*4],new C.JulianDate());
    po.addSample(t1,p1);
}
var ori=new C.VelocityOrientationProperty(po);
xx=[]
q1=new C.Quaternion();
for (var i=0;i<len;i++){
    t1=C.JulianDate.addSeconds(t0,pg[i*4],new C.JulianDate());
    ori.getValue(t1,q1);
    xx[i*5]=pg[i*4];
    xx[i*5+1]=q1.x;
    xx[i*5+2]=q1.y;
    xx[i*5+3]=q1.z;
    xx[i*5+4]=q1.w;
}
cz[1].orientation={epoch:cz[1].position.epoch,unitQuaternion:xx};
console.log(JSON.stringify(cz,null,'\t'));
});
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?