選択したノードのdbidに基づいてカメラとターゲットを更新します。コードはMobileVR関数から始まります。 dbidで取得したフラグメッシュに従ってカメラとターゲットを更新し、VRモードに移行します。現在、GEOMETRY_LOADED_EVENT、OBJECT_TREE_CREATED_EVENT、EXTENSION_LOADED_EVENTのイベントリスナーがあります。現在は、タイムアウトのsetTimeout(()=> {onSpaceObjectTreeCreated();}、3000)を使用して動作します。画像1を参照してください。ただし、タイムアウト画像はありません。2.コードを実行したりカメラを更新する前に待つ必要のあるイベントがありますか?カメラを更新する前に聴くイベント
function onSpaceObjectTreeCreated() {
const nav = viewer.navigation;
const cam = nav.getCamera();
const it = viewer.model.getData().instanceTree;
let xPos, yPos, zPos;
it.enumNodeFragments(nodeId, (frag) => {
const mesh = viewer.impl.getRenderProxy(viewer.model, frag);
xPos = mesh.matrixWorld.elements[12];
yPos = mesh.matrixWorld.elements[13];
zPos = mesh.matrixWorld.elements[14];
console.log('x: ' + xPos + ' y: ' + yPos + ' z: ' + zPos);
}, false);
zPos = -41000;
cam.position.set(xPos, yPos, zPos);
cam.target.set(xPos, yPos + 10000, zPos);
}
function onViewerGeometryLoaded() {
const nav = viewer.navigation;
const cam = nav.getCamera();
if (nodeId == -1) {
viewer.setGroundShadow(false);
let xValue = viewer.getCamera().position.x;
let yValue = viewer.getCamera().position.y;
let zValue = viewer.getCamera().position.z;
let bbz = viewer.model.getData().bbox.min.z;
let zValue2 = zValue - bbz;
zValue = zValue * 0.3;
yValue = (zValue2 * 0.7071) * -1;
let nav = viewer.navigation;
let cam = viewer.getCamera();
cam.position.set(xValue, yValue, zValue);
} else {
setTimeout(() => {
onSpaceObjectTreeCreated();
}, 3000);
}
viewer.impl.sceneUpdated();
viewer.navigation.updateCamera();
document.getElementById("toolbar-vrTool").click();
};
function afterViewerEvents() {
var events = [
Autodesk.Viewing.GEOMETRY_LOADED_EVENT,
Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT,
Autodesk.Viewing.EXTENSION_LOADED_EVENT
];
async.each(events,
function (event, callback) {
var handler = function (ev) {
viewer.removeEventListener(
event, handler);
console.log('Event: ' + event);
console.log('Ev: ' + ev.extensionId);
callback();
};
viewer.addEventListener(
event, handler);
},
function (err) {
onViewerGeometryLoaded();
});
}
function mobileVR(arkUrn: string, lviUrn: string, zOffset: number, spaceId: number) {
let element = document.getElementById("mobileViewer");
viewer = new Autodesk.Viewing.Private.GuiViewer3D(element);
let options = {
'env': 'AutodeskProduction',
'getAccessToken': getToken,
'refreshToken': getToken
};
av.Initializer(
options,
() => {
viewer.initialize();
loadDocument(arkUrn, zOffset);
if (lviUrn != "") {
loadDocument(lviUrn, zOffset);
}
viewer.loadExtension('Autodesk.Viewing.WebVR');
}
);
nodeId = spaceId;
afterViewerEvents();
}
を助けること
希望...あなたはextensionIdをチェックし、これがあなたを待っている拡張機能がある場合にのみ、ハンドラを削除する必要がロードされていますコールバックをトリガする拡張機能が正しいと思われる場合、これがコンソールに表示されます。イベント:extensionLoaded Ev:Autodesk.Viewing.WebVR。イベントをviewer.initialize()の後とloadDocumentの前に接続するようにコードを変更しましたが、これで問題は解決されません。理由は他に何かありますか?それとも私のコードで間違っている何か? –