Argon.js: Error: A frame state has not yet been received
Argon.js: Error: A frame state has not yet been received
我正在尝试使用 argon.js 服务器端,以便我可以将 lla 坐标转换为预定义的参考系。我当然没有渲染任何图形,我只是用它来转换值。请参阅 SO 问题
使用地理坐标代替笛卡尔在 Argon 和 A-Frame 中绘制
了解详情。
根据该线程,我正在尝试为固定坐标创建一个铯实体,稍后我将使用它来创建与其相关的其他实体。当我这样做时,一切都会运行,直到我到达程序的最后一行 var gtrefEntityPose = app.context.getEntityPose(gtrefEntity);
,在那里我收到 Error: A frame state has not yet been received
.
起初我认为这可能是由于将默认引用实体设置为 app.context.setDefaultReferenceFrame(app.context.localOriginEastUpSouth);
,因为我还没有本地用户,因为它是服务器端。我查阅了 setDefaultReferenceFrame as well as the possibility that I might need to use 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);
按照目前的设计,argon.js 无法在服务器端运行。特别是,在 argon.js 获得 "user" 的地理空间位置和方向之前,不会设置局部坐标系,这是从 Argon4 获得的(如果您在 Argon4 网络中 运行浏览器)或来自网络地理定位和设备方向 API 的组合(如果您 运行 使用不同的浏览器)。
全6D位姿(3D位置+3D方向),系统不知道用户的位置和视线方向,无法建立局部欧氏坐标系。因此 app.context.localOriginEastUpSouth
仍然未定义(Cesium 实体存在,但它的位置和方向未设置),并且 app.context.getEntityPose(gtrefEntity)
将失败。
要在服务器端使用 argon.js,您需要修改它以允许程序手动设置查看器的位置和方向。我可以想象这样做,甚至在移动客户端定期将姿势发送回服务器(例如,通过 socket.io)的系统中使用它。在您不关心观看方向的情况下(例如,如果您只是担心用户的位置),您可以将方向设置为 identity 并忽略返回姿势中的方向。
我正在尝试使用 argon.js 服务器端,以便我可以将 lla 坐标转换为预定义的参考系。我当然没有渲染任何图形,我只是用它来转换值。请参阅 SO 问题 使用地理坐标代替笛卡尔在 Argon 和 A-Frame 中绘制 了解详情。
根据该线程,我正在尝试为固定坐标创建一个铯实体,稍后我将使用它来创建与其相关的其他实体。当我这样做时,一切都会运行,直到我到达程序的最后一行 var gtrefEntityPose = app.context.getEntityPose(gtrefEntity);
,在那里我收到 Error: A frame state has not yet been received
.
起初我认为这可能是由于将默认引用实体设置为 app.context.setDefaultReferenceFrame(app.context.localOriginEastUpSouth);
,因为我还没有本地用户,因为它是服务器端。我查阅了 setDefaultReferenceFrame as well as the possibility that I might need to use 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);
按照目前的设计,argon.js 无法在服务器端运行。特别是,在 argon.js 获得 "user" 的地理空间位置和方向之前,不会设置局部坐标系,这是从 Argon4 获得的(如果您在 Argon4 网络中 运行浏览器)或来自网络地理定位和设备方向 API 的组合(如果您 运行 使用不同的浏览器)。
全6D位姿(3D位置+3D方向),系统不知道用户的位置和视线方向,无法建立局部欧氏坐标系。因此 app.context.localOriginEastUpSouth
仍然未定义(Cesium 实体存在,但它的位置和方向未设置),并且 app.context.getEntityPose(gtrefEntity)
将失败。
要在服务器端使用 argon.js,您需要修改它以允许程序手动设置查看器的位置和方向。我可以想象这样做,甚至在移动客户端定期将姿势发送回服务器(例如,通过 socket.io)的系统中使用它。在您不关心观看方向的情况下(例如,如果您只是担心用户的位置),您可以将方向设置为 identity 并忽略返回姿势中的方向。