|
@@ -156,7 +156,7 @@ class renderModel {
|
|
|
window.addEventListener('click', this.onMouseClick.bind(this));
|
|
window.addEventListener('click', this.onMouseClick.bind(this));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- initGltfModel() {
|
|
|
|
|
|
|
+ initGltfModel(loaded) {
|
|
|
//初始化场景
|
|
//初始化场景
|
|
|
this.initScene();
|
|
this.initScene();
|
|
|
//初始化相机
|
|
//初始化相机
|
|
@@ -167,7 +167,7 @@ class renderModel {
|
|
|
this.createLight();
|
|
this.createLight();
|
|
|
//初始化控制器,控制摄像头,控制器一定要在渲染器后
|
|
//初始化控制器,控制摄像头,控制器一定要在渲染器后
|
|
|
this.initControls();
|
|
this.initControls();
|
|
|
- this.setGlbModel();
|
|
|
|
|
|
|
+ this.setGlbModel(loaded);
|
|
|
//监听场景大小改变,跳转渲染尺寸
|
|
//监听场景大小改变,跳转渲染尺寸
|
|
|
window.addEventListener('resize', this.onWindowResizes.bind(this));
|
|
window.addEventListener('resize', this.onWindowResizes.bind(this));
|
|
|
//场景渲染
|
|
//场景渲染
|
|
@@ -353,17 +353,15 @@ class renderModel {
|
|
|
return label; //返回CSS3模型标签
|
|
return label; //返回CSS3模型标签
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- createDialog(html) {
|
|
|
|
|
|
|
+ createDialog(html, scale = 0.15) {
|
|
|
//div元素包装为CSS3模型对象CSS3DSprite
|
|
//div元素包装为CSS3模型对象CSS3DSprite
|
|
|
const element = document.createElement('div');
|
|
const element = document.createElement('div');
|
|
|
element.className = 'customDialog';
|
|
element.className = 'customDialog';
|
|
|
element.appendChild(html);
|
|
element.appendChild(html);
|
|
|
const dialog = new CSS3DSprite(element);
|
|
const dialog = new CSS3DSprite(element);
|
|
|
element.style.pointerEvents = 'none'; //避免HTML标签遮挡三维场景的鼠标事件
|
|
element.style.pointerEvents = 'none'; //避免HTML标签遮挡三维场景的鼠标事件
|
|
|
- // 设置HTML元素标签在three.js世界坐标中位置
|
|
|
|
|
- // label.position.set(x, y, z);
|
|
|
|
|
- //缩放CSS3DSprite模型对象
|
|
|
|
|
- dialog.scale.set(0.15, 0.15, 0.15); //根据相机渲染范围控制HTML 3D标签尺寸
|
|
|
|
|
|
|
+ //设置缩放比例
|
|
|
|
|
+ dialog.scale.set(scale, scale, scale);
|
|
|
dialog.rotateY(Math.PI / 2); //控制HTML标签CSS3对象姿态角度
|
|
dialog.rotateY(Math.PI / 2); //控制HTML标签CSS3对象姿态角度
|
|
|
return dialog; //返回CSS3模型标签
|
|
return dialog; //返回CSS3模型标签
|
|
|
}
|
|
}
|
|
@@ -383,7 +381,7 @@ class renderModel {
|
|
|
object.position.z = 0;
|
|
object.position.z = 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- setGlbModel() {
|
|
|
|
|
|
|
+ setGlbModel(loaded) {
|
|
|
new GltfModelManager().loadModel('model-road-pv', '/models/model-road-pv.glb').then(object => {
|
|
new GltfModelManager().loadModel('model-road-pv', '/models/model-road-pv.glb').then(object => {
|
|
|
this.calcMeshCenter(object.scene);
|
|
this.calcMeshCenter(object.scene);
|
|
|
this.model = object.scene;
|
|
this.model = object.scene;
|
|
@@ -411,6 +409,7 @@ class renderModel {
|
|
|
// if (selectedObjects.length > 0) {
|
|
// if (selectedObjects.length > 0) {
|
|
|
// this.outlineObj(selectedObjects);
|
|
// this.outlineObj(selectedObjects);
|
|
|
// }
|
|
// }
|
|
|
|
|
+ loaded && loaded();
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -619,10 +618,10 @@ class renderModel {
|
|
|
this[modelType].add(group);
|
|
this[modelType].add(group);
|
|
|
this.roomLabelGroup = group; // 保存引用
|
|
this.roomLabelGroup = group; // 保存引用
|
|
|
}
|
|
}
|
|
|
- addDialog(html, labelName, position) {
|
|
|
|
|
|
|
+ addDialog(html, labelName, position, scale) {
|
|
|
const { x, y, z } = position;
|
|
const { x, y, z } = position;
|
|
|
const label3D = this.tag3D(labelName);
|
|
const label3D = this.tag3D(labelName);
|
|
|
- const dialog3D = this.createDialog(html); //设置标签名称
|
|
|
|
|
|
|
+ const dialog3D = this.createDialog(html, scale); //设置标签名称
|
|
|
label3D.position.y += y;
|
|
label3D.position.y += y;
|
|
|
label3D.position.x += x;
|
|
label3D.position.x += x;
|
|
|
label3D.position.z += z;
|
|
label3D.position.z += z;
|