Three.js + CSS3DSprite 首帧精灵图模糊问题排查、解决

一、 现象

  页面初次加载,浮窗模糊;

  用户一旦缩放/旋转/平移,相机矩阵刷新 → 浮窗就清晰。

二、 相关代码

ini 复制代码
        showAreaModel(item, operateModel) {
            // 显示区块浮窗
            const infoDiv = document.getElementById(`operateModel-${item.tenantId}`);
            if (infoDiv) {
                const bbox = new THREE.Box3().setFromObject(operateModel);
                const center = new THREE.Vector3();
                bbox.getCenter(center);

                let sprite = new CSS3DSprite(infoDiv);
                sprite.position.set(center.x, 0.92, center.z);
                sprite.hdType = '区块浮窗';
                // 原尺寸太大,缩小浮窗
                sprite.scale.multiplyScalar(0.0014);

                this.scene.add(sprite);
                sprite.mainModel = operateModel;
                operateModel.blockCardModel = sprite;
            }
        },

三、经过排查、调研, 最终有效方案

  核心思路:避免使用threejs的scale缩放,避免直接用 sprite.scale 缩放,改为 DOM 内层缩放。

  实现方式:

    给浮窗 DOM 加一层 外包装容器(three.js 控制定位)。

    内层 DOM 用 transform: scale() 缩放元素。

    创建精灵图时 sprite 保持 scale = 1,不再使用 threejs的scale 缩放。

  示例:

css 复制代码
<div class="sprite-wrapper">

   <div class="sprite-inner">浮窗文字</div>

</div>

.sprite-wrapper {

   display: inline-block; /* three.js 控制它 */

}

.sprite-inner {

   transform: scale(0.0014) translate(-50%, -50%); ;    /* 再缩小 */

   transform-origin: top left;  /* 保持对齐 */

}

四、 结论

  不要使用threejs 极小缩放精灵图,在dom里使用css缩放元素。

相关推荐
遇乐的果园10 小时前
前端学习笔记-vue加载渲染优化
前端·笔记·学习
用户9850335932811 小时前
OpenLayers 热力图从原理到 Vue 组件一键接入
前端
颜酱11 小时前
01 | 骨架搭建:FastAPI + Vue 跑通第一个 SSE 流式问答
前端·人工智能·后端
hoLzwEge11 小时前
解码 IDE 智能提示:jsconfig.json 辅助开发全攻略
前端·前端框架
leoZ23111 小时前
记忆系统与 Agent 定制完全指南(四):自定义 Agent 开发(一)
前端·chrome
慧一居士11 小时前
Element Plus 按需引入的配置使用说明和完整示例
前端·vue.js
程序员黑豆11 小时前
鸿蒙应用开发实战:从零学会自定义组件
前端·华为·harmonyos
leoZ23111 小时前
记忆系统与 Agent 定制完全指南(三):记忆的检索与使用
前端·chrome
遇乐的果园11 小时前
前端学习笔记-vue状态管理优化
前端·笔记·学习
GIS阵地12 小时前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis