基于vue与three.js给模型添加标签(CSS2DRenderer与CSS2DObject)

第一步,引入

import {
  CSS2DRenderer,
  CSS2DObject,
} from "three/examples/jsm/renderers/CSS2DRenderer.js";

第二步,创建渲染器

this.tagRenderer = new CSS2DRenderer();
      this.tagRenderer.setSize(this.w, this.h);
      this.tagRenderer.domElement.style.position = "absolute";
      this.tagRenderer.domElement.style.zIndex = 9999999;
      this.tagRenderer.domElement.style.top = "0px";
      this.tagRenderer.domElement.style.pointerEvents = "none";
      this.$refs.three_container.appendChild(this.tagRenderer.domElement);

this.$refs.three_container为3D渲染的容器,注意zindex必须足够高

animate方法:

 animate() {
      if (!this.renderer) {
        return;
      }
      requestAnimationFrame(this.animate);
      this.controls.update(); // 更新控制器状态
      TWEEN.update();
      this.renderer.render(this.scene, this.camera);
      if (!this.tagRenderer) {
        return;
      }
      this.tagRenderer.render(this.scene, this.camera);
    },

第三步,创建dom

 this.options.forEach((item) => {
        if (item.position) {
          let domEle = document.createElement("div");
          domEle.className = "tag";
          domEle.innerHTML = `<div>${item.label}</div>
          <div>今日电耗:1892.01kwh</div>
          `;
          let domEleObj = new CSS2DObject(domEle);
          domEleObj.position.set(
            item.position.x,
            item.position.y,
            item.position.z
          );

          this.scene.add(domEleObj);
        }
      });
::v-deep .tag {
  box-shadow: 0 0 2px #00ffff inset;
  background: linear-gradient(#00ffff, #00ffff) left top;
  background-repeat: no-repeat;
  background-size: 1px 6px, 6px 1px;
  background-color: rgba(0, 0, 0, 0.8);
  color: #ffffff;
  font-size: 12px;
  padding: 4px 10px;
  position: absolute;
  z-index: 9;
  display: inline;

}

得用deep,不然容易不生效 

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Vue中导入Three.jsCSS3DRenderer需要进行以下步骤: 1. 首先,你需要安装Three.js库。可以使用npm或者下载Three.js的压缩文件并在项目中引入。 2. 在需要使用CSS3DRenderer的组件中,首先导入Three.js的依赖项,包括CSS3DRenderer。 import * as THREE from 'three'; import { CSS3DRenderer } from 'three/examples/jsm/renderers/CSS3DRenderer'; 3. 创建一个Vue组件,其中包含一个用于渲染Three.js场景的容器。 <template> <div ref="container"></div> </template> 4. 在Vue中的mounted生命周期钩子函数中初始化Three.js渲染器和场景。 export default { mounted() { const container = this.$refs.container; const renderer = new CSS3DRenderer(); // 创建CSS3DRenderer实例 renderer.setSize(container.clientWidth, container.clientHeight); // 设置渲染器的尺寸 container.appendChild(renderer.domElement); // 将渲染器的DOM元素添加到容器中 const scene = new THREE.Scene(); // 创建场景 // 在这里可以添加其他Three.js场景对象,如相机、光源、物体等 // 渲染函数,每次渲染时调用 const render = () => { renderer.render(scene, camera); // 在这里可以根据场景需要进行其他操作,如更新物体的位置、旋转等 requestAnimationFrame(render); }; render(); // 开始渲染 }, }; 5. 最后,在Vue组件的样式表中添加容器的样式。 <style scoped> .container { width: 100%; height: 100%; } </style> 通过以上步骤,在Vue中成功导入并使用Three.js中的CSS3DRenderer进行渲染。当然,在实际使用中,你需要根据自己的项目需求进行调整和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值