ThreeJs通过canvas和Sprite添加标签

本文介绍了如何在3D场景中使用Sprite和Canvas技术,针对动态变化的模型名称,实现实时生成标签并附着在模型上,标签始终面向摄像机,提高数据识别效率。核心代码展示了如何创建、渲染和定位标签。
摘要由CSDN通过智能技术生成

        在3D场景中很多时候会用到给模型添加标签,以表示这个模型的代号,尤其是大量重复模型的时候,添加标签是为了更直观的看到场景中每个模型的数据和名称,比如在仓库中有很多货架,就会需要查看每个货架的编号,如果某个货架出问题便可以通过编号快速定位是哪一个货架。

        这节就讲如何用sprite和canvas添加标签,之前有讲过Sprite绘制下雨的场景,是先加载图片,然后封装为Sprite对象,再随机放置到场景中,但是现在情况很显然不适合使用固定的图片,因为每个货架的名称是动态变化的,需要根据字符串实时生成一个Sprite,这里就用到了Canvas,可以先用canvas设置字符串并绘制成图片,再将图片放置到Sprite中并定位到模型的位置,基于模型的位置往上添加一定的高度,这样就完成了对模型的标识,下面提供核心代码

//传入模型的坐标轴和货架的高度
addShelfLabel(rackX,rackY,rackz,rack){
    //创建一个canvas元素
      const canvas = document.createElement('canvas');
    //新增一个2d的绘图对象
      const context = canvas.getContext('2d');
    //设置绘图对象汇总的字体演示
      context.font = 'bold 30px Arial';
    //设置绘制的样式
      context.fillStyle = '#1296db';
    //设置货架的名字以及在2D场景中位置
      context.fillText(rack.rackName, 10, 50);
    //通过threejs的贴图,将canvas的内容转化为贴图图片
      const texture = new THREE.Texture(canvas);
      texture.needsUpdate = true; // 确保纹理更新
     //将带有贴图的图片转为Sprite的材质
      const spriteMaterial1 = new THREE.SpriteMaterial({map: texture});
    //新建Sprite对象,并设置好贴图材质
      const sprite = new THREE.Sprite(spriteMaterial1);
     //设置sprite的位置为货架的xy,并给z轴新增10的高度
      sprite.position.set(rackX, rackY, rackz+10)
    //根据需要缩放sprite大小
      sprite.scale.set(25, 25, 1); //只需要设置x、y两个分量就可以
    //最后添加到场景中显示
      scene.add( sprite );
},

这种标签的好处是,从任何方向查看都是对着摄像机的

效果

给模型添加标签

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在使用Three.js创建的canvas画布布局方面,你可以根据你的项目需求将渲染结果renderer.domElement插入到web页面上的任何一个元素中。你可以通过设置元素的样式来控制canvas画布的位置和大小。例如,你可以使用div元素来容纳canvas画布,并设置div元素的样式来控制canvas画布的位置和边距。下面是一个示例代码: ```html <div id="webgl" style="margin-top: 100px; margin-left: 200px;"></div> ``` 在这个示例中,我们使用一个id为"webgl"的div元素来容纳canvas画布,并设置了margin-top和margin-left属性来控制canvas画布的位置。你可以根据需要调整这些属性的值来实现你想要的布局效果。然后,你可以使用JavaScript代码将渲染结果插入到这个div元素中,例如: ```javascript document.getElementById('webgl').appendChild(renderer.domElement); ``` 这样,canvas画布就会被插入到id为"webgl"的div元素中,实现了你所需的布局效果。你也可以根据需要将canvas画布插入到其他元素中,只要符合你项目的布局规则即可。 #### 引用[.reference_title] - *1* *3* [Canvas画布布局和全屏展示](https://blog.csdn.net/BradenHan/article/details/130055592)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Three.js教程:Canvas画布布局和全屏](https://blog.csdn.net/ygtu2018/article/details/131300425)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baker_zhuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值