首页 > 大数据 > 可视化 > 园区模型与全景图联动开启第一人称巡游



function createPlayer() {
THING.PanoManager.createPlayer(panoData, {
fullscreen: false, // 是否全屏
location: "right-center", // 悬浮框所在位置
offsetX: 0, // 相对于location的X轴偏移
offsetY: 0 // 相对于location的Y轴偏移
}, {
panoID: panoData.config.panos[0].panoID, // 初始打开的全景图
h: 180, // 打开全景图的初始视角h
v: 0 // 打开全景图的初始视角v
}, null, function() {
createTourButton();
createPoints();
});
// 全景图播放器中全景图切换事件
app.on(THING.PanoEvent.PanoChange, function(event) {
var panoID = event.panoID; // 当前打开的全景图ID
var panoObj = app.query("[panoID=" + panoID + "]")[0]; // 当前打开的全景图ID
if (isPoint && panoObj) {
var panos = app.query("[panoObj=1]");
moveToNext(panoObj.position);
}
curPanoConfig = event.pano;
if (!carModel) return;
reComputePosition(curPanoConfig.position, carModel.position, carModel.angles);
});
}
function createModel() {
// 创建Thing
carModel = app.create({
type: 'Thing',
name: 'car',
url: modelUrl, // 模型地址
position: [-25, 0, 30],
angles: [0, 90, 0], // 旋转
complete: function(ev) {
ev.object.style.renderOrder = 1;
// 添加到全景图中
var pano3DObjProperties =
THING.PanoManager.compute3DObjectProperties(panoData.config.panos[0].position.position, ev.object.position, ev.object.angles);
THING.PanoManager.create3DObject("pano3DObj", modelUrl, false, pano3DObjProperties);
}
});
carModel.draggable = true; // 设置模型可拖拽
carModel.on('drag', function(ev) {
if (!ev.picked) return;
var pickPos = ev.pickedPosition; // 获取当前拾取坐标
ev.object.position = pickPos; // 设置模型位置
reComputePosition(curPanoConfig.position.position, ev.object.position, ev.object.angles);
});
}
function createRoute() {
var line = app.query("panoLine");
if (line[0]) line[0].destroy();
var line2 = app.create({
type: 'RouteLine',
name: "panoLine",
points: points,
image: 'https://www.thingjs.com/static/images/line01.png' // 线路中的纹理资源
});
// 启用 UV 动画
line2.scrollUV = true;
line2.style.renderOrder = 9;
}
/**
* 创建人物模型
*/
function createPersonModel() {
peopleModel = app.create({
type: 'Thing',
url: 'https://model.3dmomoda.cn/models/0bcba8ca78734b64a3dae3eb699a913c/0/gltf/',
position: [-10.4, 0, 27.9],
complete: function() {
peopleModel.playAnimation({ name: '_defaultAnim_', loop: true });
}
});
peopleModel.rotateY(-90.0);
}
/**
* 控制人物移动
*/
function moveToNext(p) {
peopleModel.playAnimation({ name: '跑步', loop: true });
peopleModel.style.opacity = 1.0;
peopleModel.style.outlineColor = "#FF0000";
peopleModel.moveTo({
"position": p,
"time": 1500,
"orientToPath": true,
"lerp": false,
"complete": function() {
peopleModel.playAnimation({ name: '_defaultAnim_', loop: true });
}
});
}
/**
* 计算全景图中模型位置
*/
function reComputePosition(panoPosition, modelPosition, modelAngles) {
console.log(panoPosition);
console.log(modelPosition);
var pano3DObjProperties = THING.PanoManager.compute3DObjectProperties(panoPosition, modelPosition, modelAngles);
console.log(pano3DObjProperties);
THING.PanoManager.set3DObjectProperties("pano3DObj", pano3DObjProperties);
}
})

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69980539/viewspace-2786583/ ,如需转载,请注明出处,否则将追究法律责任。