请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Felix.Li Wyn认证

超级版主

87

主题

2685

帖子

5066

积分

超级版主

Rank: 8Rank: 8

积分
5066

Wyn高级认证Wyn认证

Felix.Li Wyn认证
超级版主   /  发表于:2024-9-29 11:34  /   查看:36  /  回复:0
wyn的新版本在3D模型层面已经有很多新的效果展示。自然而然也伴生了很多成型的方法供大家使用,今天给大家分享一个简单的3D效果

快速聚焦查看选择模型

功能其实就是我们的模型可以支持点击,并且点击的时候,可以聚焦显示我们的点击的模型,并且只显示我们点击的模型,然后隐藏其他所有模型。先看一下效果吧:
move1.gif

那么接下来就来看一下怎么实现呢。
总共实现分为两步
1.实现聚焦的能力
2.实现显隐的能力

分别来说
1.显示聚焦的能力
这个其实只需要使用我们提供的配置即可:
如果我们需要聚焦的,是一整个数据图层,其实就可以直接在数据图层处设置:
image.png387111205.png
这样改图层上所有绑定数据的模型,都可以直接实现聚焦,如果未绑定数据,只是单个模型的话,也可以单独设置:
image.png45801695.png
我们对模型节点或者模型节点容器的点击行为做设置即可。

1.实现显隐的能力
这个就需要配合我们的一定3D场景的自定义脚本了,具体脚本实现如下(场景设定 -> 自定义脚本 -> 创建一个场景加载完成的脚本):
  1. scene.selectModel = false;
  2. scene.onPointerObservable.add((pointerInfo) => {
  3.     if (pointerInfo.type === BABYLON.PointerEventTypes.POINTERDOWN) {
  4.         const pickResult = scene.pick(pointerInfo.event.clientX, pointerInfo.event.clientY);
  5.         if (pickResult.hit) {
  6.             scene.selectModel = true;
  7.             scene.meshes.forEach((mesh) => {
  8.                 if (pickResult.pickedMesh.name == mesh.name) {
  9.                     mesh.isVisible = true;
  10.                 }
  11.                 else
  12.                     mesh.isVisible = false;
  13.             });
  14.         } else {
  15.             if (scene.selectModel) {
  16.                 scene.meshes.forEach((mesh) => {
  17.                     mesh.isVisible = true;
  18.                 });
  19.             };
  20.             scene.selectModel = false;
  21.         }
  22.     }
  23. }, BABYLON.PointerEventTypes.POINTERDOWN);
复制代码

该方法就是获取场景的点击事件,然后当我们点击到模型的时候,执行上半部分,对点击的模型做显示,其他模型做隐藏。
否则点击空白区域,就是显示所有的模型。
以上就是所有的步骤了,想实现的快试试吧

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部