threejs 添加css3d标签 vue3

如图所示,给收费站标注标签。步骤如下:

一、引入

javascript 复制代码
import {
    CSS3DRenderer,
    CSS3DObject,
} from "three/examples/jsm/renderers/CSS3DRenderer";

二、

javascript 复制代码
//一、申明css3渲染器
const label3DRenderer = ref()

//二、创建css3d渲染器--将渲染器加入body
const css3dRenderer = () => {
    label3DRenderer.value = new CSS3DRenderer();
    label3DRenderer.value.setSize(window.innerWidth, window.innerHeight);
    label3DRenderer.value.domElement.style.position = "absolute";
    // 相对标签原位置位置偏移大小
    label3DRenderer.value.domElement.style.top = "0px";
    label3DRenderer.value.domElement.style.left = "0px";
    //设置.pointerEvents=none,以免模型标签HTML元素遮挡鼠标选择场景模型
    label3DRenderer.value.domElement.style.pointerEvents = "none";
    document.body.appendChild(label3DRenderer.value.domElement);
};
//三、创建一个函数返回一个div标签
const tag = (name) => {
    // 创建div元素(作为标签)
    var div = document.createElement("div");
    div.innerHTML = name;
    div.classList.add("tag");
    //div元素包装为CSS3模型对象CSS3DObject
    var label = new CSS3DObject(div);
    div.style.pointerEvents = "none"; //避免HTML标签遮挡三维场景的鼠标事件
    // 设置HTML元素标签在three.js世界坐标中位置
    // label.position.set(x, y, z);
    //缩放CSS3DObject模型对象
    label.scale.set(0.02, 0.02, 0.02); //根据相机渲染范围控制HTML 3D标签尺寸
    // label.rotateY(Math.PI / 2); //控制HTML标签CSS3对象姿态角度
    // label.rotateX(-Math.PI/2);
    return label; //返回CSS3模型标签
};

//四、加载模型以后获取每个标签的位置把标签添加进sence
 loader.load("./收费站.glb", (gltf) => {
        isShowLoding.value = false
        scene.add(gltf.scene)
        let group = gltf.scene.getObjectByName("车道中间标注2");
        group.children.map(item => {
            const label = tag(item.name)
            var pos = new THREE.Vector3();
            item.getWorldPosition(pos); //获取obj世界坐标、
            label.position.copy(pos);
            scene.add(label)
        })

    }, (xhr) => {
       
    });

五、别忘记调用之前封装的函数(创建css3渲染器)
 css3dRenderer()
相关推荐
OpenTiny社区6 分钟前
Loop Engineering:让 AI Agent 自己跑起来的工程方法
前端·github
IT_陈寒27 分钟前
SpringBoot自动配置坑了我一周,原来问题这么蠢!
前端·人工智能·后端
kyriewen43 分钟前
我review了一份Vibe Coding写的前端代码——能跑,但5个地方迟早要命
前端·javascript·ai编程
REDcker1 小时前
Cesium三维WebGIS入门详解
前端·gis·web·cesium·webgis
0暗影流光01 小时前
十倍效能提升——Web 基础研发体系的建立
前端
前端一课2 小时前
用Agent Skill重构代码:300行缩至30行的实战教程
前端
腻害兔2 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:IM 即时通讯模块,一个被低估的「全功能聊天系统」
java·前端·vue.js·产品经理·ai编程
奎叔2 小时前
Flutter 异常处理体系:从捕获、转换到恢复
前端
心念枕惊2 小时前
.NET CORE 授权进阶-角色、策略与动态权限实现
java·前端·.netcore
小徐_23332 小时前
寓言故事一则:狗猛酒酸
前端·ai编程