1.给threejs中的一个物体说明其作用,设置一个提示标签,代码如下
<div class="absolute bg_rgba6 warning_title_box center px-10 py-10"
style="left:1000px;top:345px;">
火灾警报
</div>
效果如图:
这是一个写死的通过css样式控制位置的标签,但是此时如果我们去转动物体,标签是不会动的,这样效果就很差了,如果标签多了都不知道是谁了,怎么样让标签跟随转动就是接下来说的
2.让标签跟随物体位置变化
代码:
<template>
<div class="absolute bg_rgba6 warning_title_box center px-10 py-10"
v-show="fireSwitch && tipsSwitch" :style="{left:(tipsPopX1 + 35) + 'px',top:(tipsPopY1-80)+'px'}">
火灾警报
</div>
</template>
<script>
export default {
data(){
return{
fireSwitch:true,//
tipsSwitch:true,// 提示标签
tipsPopX1:0,
tipsPopY1:0,
}
},
methods:{
tipsPosition(){
let halfWidth = this.container.offsetWidth / 2;
let halfHeight = this.container.clientHeight / 2;
if(this.fireSwitch){
let nameNode1 = this.scene.getObjectByName( "fire" );// 返回一个匹配该名字的子对象
// 克隆子对象的position --- 表示对象局部位置的Vector3(三维向量坐标)
// 三维向量的project方法 --- 世界坐标在相机对象变化下的校准设备坐标
let vector1 = nameNode1.position.clone().project(this.camera);
this.tipsPopX1 = Math.floor((vector1.x * halfWidth + halfWidth) * 100) / 100;
this.tipsPopY1 = Math.floor((-vector1.y * halfHeight + halfHeight) * 100) / 100;
}
},
}
}
</script>
然后把tipsPosition();加入到 之前的animate();方法中,当你转动物体时会跟随改变位置,当然首先你得把你要跟随的物体设置一个名称 例如:mesh.name="fire";