2016-10-24 7 views
1

argon.jsサーバー側を使用して、lla座標を定義済みの参照フレームに変換できるようにしようとしています。私はもちろん、グラフィックスを描画していない、私はちょうど値を変換するために使用しています。詳細はSOの質問 Using Geo-coordintes Instead of Cartesian to Draw in Argon and A-Frame を参照してください。Argon.js:エラー:フレームの状態がまだ受信されていません

スレッドごとに、固定座標のセシウムエンティティを作成しようとしていますが、これを後で他のエンティティを作成するために使用します。私がするとき、私はError: A frame state has not yet been receivedを受け取るプログラムvar gtrefEntityPose = app.context.getEntityPose(gtrefEntity);の最後の行に達するまですべてが実行されます。

私はこれがローカル側のユーザーをまだ持っていないので、デフォルトの参照エンティティをapp.context.setDefaultReferenceFrame(app.context.localOriginEastUpSouth);に設定していることが原因であると考えました。 setDefaultReferenceFrameのドキュメントを参照し、convertEntityReferenceFrameとそれぞれのソースコードを使用する必要がある可能性も考えましたが、プログラムの知識があれば分かりません。

下記のエラーと私のアプリケーションコードを入れました。

ありがとうございました!ここで

/home/path/to/folder/node_modules/@argonjs/argon/dist/argon.js:4323 
    if (!cesium_imports_1.defined(this.serializedFrameState)) throw new Error(
                   ^
Error: A frame state has not yet been received 
at ContextService.Object.defineProperty.get [as frame] (/home/path/to/folder/node_modules/@argonjs/argon/dist/argon.js:4323:89) 
at ContextService.getTime (/home/path/to/folder/node_modules/@argonjs/argon/dist/argon.js:4343:32) 
at ContextService.getEntityPose (/home/path/to/folder/node_modules/@argonjs/argon/dist/argon.js:4381:37) 
at Object.<anonymous> (/home/path/to/folder/test.js:27:35) 
at Module._compile (module.js:460:26) 
at Object.Module._extensions..js (module.js:478:10) 
at Module.load (module.js:355:32) 
at Function.Module._load (module.js:310:12) 
at Function.Module.runMain (module.js:501:10) 
at startup (node.js:129:16) 

が私のコードです:それは、現在設計されていますとおり

var Argon = require('@argonjs/argon'); 

var Cesium = Argon.Cesium; 


var Cartesian3 = Cesium.Cartesian3; 
var ConstantPositionProperty = Cesium.ConstantPositionProperty; 
var ReferenceFrame = Cesium.ReferenceFrame; 
var ReferenceEntity = Cesium.ReferenceEntity; 
//var degToRad = THREE.Math.degToRad; 

const app = Argon.init(); 
app.context.setDefaultReferenceFrame(app.context.localOriginEastUpSouth); 

var data = { lla : { x : -84.398881, y : 33.778463, z : 276 }}; 

var gtref = Cartesian3.fromDegrees(data.lla.x, data.lla.y, data.lla.z); 
var options = { position: new ConstantPositionProperty(gtref, ReferenceFrame.FIXED), 
      orientation: Cesium.Quaternion.IDENTITY 
      }; 

var gtrefEntity = new Cesium.Entity(options); 
var gtrefEntityPose = app.context.getEntityPose(gtrefEntity); 

答えて

2

、argon.jsは、サーバー側に動作しません。特に、argon.jsがArgon4(Argon4 Webブラウザで実行している場合)から取得した "user"の地理空間的な位置と方向を取得するまで、ローカル座標フレームは設定されません。 Webジオロケーションとデバイス指向API(別のブラウザで実行している場合)

完全な6Dポーズ(3D位置+ 3D方向)では、システムはユーザの位置および視線方向を知らず、ローカルユークリッド座標フレームを確立できません。したがって、app.context.localOriginEastUpSouthは未定義です(セシウムエンティティは存在しますが、位置と向きは設定されていません)。app.context.getEntityPose(gtrefEntity)は失敗します。

サーバ側でargon.jsを使用するには、プログラムがビューアの位置と向きを手動で設定できるように変更する必要があります。私はそのことを想像して、モバイルクライアントが定期的にサーバーにポーズを戻す(例えばsocket.ioを介して)システムでそれを使用することさえ想像することができます。視線方向を気にしない場合(たとえば、ユーザーの位置だけを心配している場合など)は、向きをIDに設定し、返された姿勢の向きを無視することができます。

+1

これが完成しました。ありがとう!はい、まさに私がsocket.ioでしようとしていることです。 – crld

関連する問題