three.js点击建模高亮EffectComposer

//高亮显示模型(呼吸灯)
      outlineObj(selectedObjects) { // 创建一个EffectComposer(效果组合器)对象,然后在该对象上添加后期处理通道。
        composer = new EffectComposer(renderer)
        // 新建一个场景通道  为了覆盖到原理来的场景上
        renderPass = new RenderPass(scene, camera)
        composer.addPass(renderPass);
        // 物体边缘发光通道 --应用的宽高-应用的场景-应用的相机-应用的模型==计算位置
        outlinePass = new OutlinePass(new THREE.Vector2(window.innerWidth, window.innerHeight), scene, camera,
          selectedObjects)
        outlinePass.selectedObjects = selectedObjects
        outlinePass.edgeStrength = 10.0 // 边框的亮度
        outlinePass.edgeGlow = 1 // 光晕[0,1]
        outlinePass.usePatternTexture = false // 是否使用父级的材质
        outlinePass.edgeThickness = 1.0 // 边框宽度
        outlinePass.downSampleRatio = 1 // 边框弯曲度
        outlinePass.pulsePeriod = 5 // 呼吸闪烁的速度
        outlinePass.visibleEdgeColor.set(parseInt(0x00ff00)) // 呼吸显示的颜色
        outlinePass.hiddenEdgeColor = new THREE.Color(0, 0, 0) // 呼吸消失的颜色
        outlinePass.clear = true
        composer.addPass(outlinePass)
        // 自定义的着色器通道 作为参数
        var effectFXAA = new ShaderPass(FXAAShader)
        effectFXAA.uniforms.resolution.value.set(1 / window.innerWidth, 1 / window.innerHeight)
        effectFXAA.renderToScreen = true
        composer.addPass(effectFXAA)
        // 创建伽马校正通道
        const gammaPass = new ShaderPass(GammaCorrectionShader);
        composer.addPass(gammaPass);
      },
/** 鼠标点击事件, */
      clickGet(event) {
        let that = this
        let intersects = that.getMouse(event)
        //为什么 点击只需要获取0,因为点击有贯穿效果,有时候一个模型背后还有很多模型,这个时候获取的数组是按近到远排序,所以说只需要获取第一个
        if (intersects.length > 0 && intersects[0].object.name != '机柜' && intersects[0].object.userData.name != '地板' &&
          intersects[0].object.type != 'GridHelper') {
          this.outlineObj([intersects[0].object])
          if (intersects[0].object.name == 'JX_2') {
            this.nums = 2
          } else if (intersects[0].object.name == 'JX_3') {
            this.nums = 3
          } else if (intersects[0].object.name == 'JX_4') {
            this.nums = 4
          }
          this.dialogVisible = true

          // let initPosition = {
          //         x: camera.position.x,
          //         y: camera.position.y,
          //         z: camera.position.z,
          //       };
          // let tween = new TWEEN.Tween(initPosition)
          //     .to({ x: intersects[0].object.position.x, y: intersects[0].object.position.y, z: intersects[0].object.position.z }, 2000)
          //     .easing(TWEEN.Easing.Sinusoidal.InOut);
          //   let onUpdate = (pos) => {
          //     let x = pos.x;
          //     let y = pos.y;
          //     let z = pos.z;
          //     if (pos.z < 0) {
          //       camera.position.set(x, y, z - 12);
          //     } else {
          //       camera.position.set(x, y, z + 12);
          //     }
          //   };
          //   tween.onUpdate(onUpdate);
          //   tween.start();

        }
      },

将this.outlineObj()放入点击事件即可高亮!!

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值