我試圖使用argon.js轉換LLA座標到從預定義的參考幀的本地座標。向我推薦的方法(據我所知)要求我從一組lla's創建一個cesium實體,然後在使用其他lla's創建後續cesium實體時使用該ceisum實體作爲參考。Argon.js/A-框架:從getEntityPose()本地座標不相對於refereceFrame
我嘗試過使用兩種方法來做到這一點:第一種方法是在argon.js中創建參考銫實體,第二種方法是創建一個帶有geoseose的a-frame實體,然後從a-框架實體的組件列表。我使用argon.js進行所有後續轉換。
在兩種方法中,我有成功創建參考銫實體,並且它出現(我,至少)該轉換銫實體包括參考實體,因爲它們的參考幀。然而,被轉換實體的實體拋物線仍然是0,0,0。我的期望是參考實體是0,0,0,並且被轉換的實體將具有相對於該實體的局部座標(例如4,8,10) 。此外,在每種情況下,實體的poseStatus爲0,但argon.js文檔僅列出了KNOWN = 1,FOUND = 2和LOST = 4的可能性。
我已經在下面包含了我的代碼,檢查員的一些反饋。返回的對象非常大,所以我只包含我認爲相關的內容,但請告訴我是否還有其他屬性。還請注意,代碼包含上面列出的兩個選項,第二個選項已註釋掉。
對於一些歷史看:從檢查
Using Geo-coordintes Instead of Cartesian to Draw in Argon and A-Frame
Argon.js: Error: A frame state has not yet been received
<!DOCTYPE html>
<html>
<head>
<title>Hello world</title>
<script src="/socket.io/socket.io.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/geolocator/2.1.0/geolocator.js"></script>
<script src="arframe/main/resources/js/aframe.js"></script>
<script src="arframe/main/resources/js/argon.min.js"></script>
<script src="arframe/main/build.js"></script>
<script src="arframe/main/resources/js/CSS3DArgonRenderer.js"></script>
<script src="arframe/main/resources/js/CSS3DArgonHUD.js"></script>
<script src="arframe/main/resources/js/aframe-look-at-component.js"></script>
</head>
<body>
<h1>Hello world</h1>
<ar-scene>
<!--OPTION 2-->
<!-- <a-entity id='madRefFrame' referenceframe='lla: -84.31169 33.756128'></a-entity> -->
</ar-scene>
<script>
// OPTION 1
var app = Argon.init();
// OPTION 2
//var scene = document.querySelector('ar-scene');
//var app = scene.argonApp;
var Cesium = Argon.Cesium;
var Cartesian3 = Cesium.Cartesian3;
var ConstantPositionProperty = Cesium.ConstantPositionProperty;
var ReferenceFrame = Cesium.ReferenceFrame;
var ReferenceEntity = Cesium.ReferenceEntity;
app.context.setDefaultReferenceFrame(app.context.localOriginEastUpSouth);
app.updateEvent.addEventListener(function (frame) {
if (Argon.PoseStatus.KNOWN) {
// OPTION 1
var madRefData = { lla : { x : -84.31169, y : 33.756128, z : 299 }};
var madRef = Cartesian3.fromDegrees(madRefData.lla.x, madRefData.lla.y, madRefData.lla.z);
var options = { position: new ConstantPositionProperty(madRef, ReferenceFrame.FIXED),
orientation: Cesium.Quaternion.IDENTITY
};
var madRefEntity = new Cesium.Entity(options);
console.log('madRefEntity');
console.log(madRefEntity);
var madRefEntityPose = app.context.getEntityPose(madRefEntity);
console.log('madRefEntityPose');
console.log(madRefEntityPose);
// OPTION 2
// var madRefEL = document.querySelector('#madRefFrame');
// var madRefFrame = madRefEL.components['referenceframe'];
// var madRefEntity = madRefFrame.cesiumEntity;
//
// console.log('madRefEntity');
// console.log(madRefEntity);
//
// var madRefEntityPose = app.context.getEntityPose(madP1Entity);
//
// console.log('madRefEntityPose');
// console.log(madRefEntityPose);
// USED IN OPTIONS 1 AND 2
var madP1Data = { lla : { x : -84.31169, y : 33.755602, z : 297 }};
var madP1Ref = Cartesian3.fromDegrees(madP1Data.lla.x, madP1Data.lla.y, madP1Data.lla.z);
var options = { position: new ConstantPositionProperty(madP1Ref, madRefEntity),
orientation: Cesium.Quaternion.IDENTITY
};
var madP1Entity = new Cesium.Entity(options);
console.log('madP1Entity');
console.log(madP1Entity);
var madP1EntityPose = app.context.getEntityPose(madP1Entity);
console.log('madP1EntityPose');
console.log(madP1EntityPose);
} else {
// if we don't know the user pose we can't do anything
console.log("we don't know.");
return;
};
});
</script>
</body>
</html>
反饋:
A-Frame Version: 0.3.2
three Version: ^0.76.1
WebVR Polyfill Version: 0.9.15
Reality changed to: {"uri":"reality:empty","title":"Reality","providedReferenceFrames":["FIXED"]}
THREE.CSS3DArgonRenderer 76CSS3D
THREE.CSS3DArgonHUD 76CSS3D
THREE.WebGLRenderer 76
Reality changed to: {"uri":"reality:empty","title":"Reality","providedReferenceFrames":["FIXED"]}
reference frame changed to FOUND
madRefEntity
Object { _availability: undefined,
_id: "ae5fe824-12ea-4d7f-87e8-0eee0ca31008",
// METHOD 2
// _id: "madRefFrame"
_parent: undefined,
_propertyNames: Array[19],
...
_position:Object
_definitionChanged:Object
_referenceFrame:0
_value:Object
x:526169.6230387943
y:-5282445.040716821
z:3524154.8442182266
// METHOD 2
//x:526144.9834483624
//y:-5282197.673182507
//z:3523988.702129788
...
}
madRefEntityPose
Object { position : { x: 0, y: 0, z: 0 },
orientation: { w: 1, x: 0, y: 0, z: 0 },
time: {dayNumber: 2457689, secondsOfDay : 81280.139927485},
poseStatus: 0 }
madRefP1Entity
Object { _availability: undefined,
_id: "9ded96ab-961c-4ba3-b766-8c37e919877f",
...
_parent: undefined,
_position: object
_referenceFrame: object
_id: "ae5fe824-12ea-4d7f-87e8-0eee0ca31008",
// METHOD 2
// _id: "madRefFrame"
_orientation: object
_value: Object
_w: 1,
_x: 0,
_y: 0
_z: 0
...
_position: Object
_value:Object
x:526169.6230387943
y:-5282445.040716821
z:3524154.8442182266
// METHOD 2
//x:526144.9834483624
//y:-5282197.673182507
//z:3523988.702129788
...
...
...
_value:Object
x:526172.6715934229
y:-5282475.646478866
z:3524105.2236363157
...
}
madRefEntityPose
madRefEntityPose = { position : { x: 0, y: 0, z: 0 },
orientation: { w: 1, x: 0, y: 0, z: 0 },
time: {dayNumber: 2457689, secondsOfDay : 81281.12722016001},
poseStatus: 0 }
我不確定我會將它稱爲「錯誤」,而是按照設計工作:沒有方向和位置,您沒有完整的相機姿勢。但是,由於大多數桌面瀏覽器都沒有世界取向,我們正在改變事物以默認使用標識方向。我們也改變了桌面上的現實,以支持點擊拖動旋轉(如許多桌面3D應用程序),以便您可以使用鼠標環視四周。 –
我真誠的道歉!回覆編輯。 – crld