three.js之地图图标旋转角度时模糊不清解决

本文探讨了在Three.js中遇到的问题,即从不同角度观察图标时效果变化。作者通过比较使用PlaneGeometry和平面材料与SpriteMaterial精灵材料的区别,展示了如何创建3D图标,使其在不同角度下保持一致的显示效果。关键在于利用SpriteMaterial并结合canvas绘制图片,然后将其作为纹理应用。最后,调整透明度设置以消除角度变化导致的模糊现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 最近在研究three.js真是写一步一个问题😂,无奈还是要继续做。只能一步步填坑

  • 先上效果图
    在这里插入图片描述

  • 换个角度
    在这里插入图片描述

  • 问题:不同的角度看到的图标效果不一样,我想要实现的是不同角度看到的效果是一样的

  • 上图的这种效果是用:PlaneGeometry平面模型和MeshBasicMaterial基础网格材料来做的

   drawPlane(x, y, z, value, i) {
      const hei = value / 30
      const geometry = new THREE.PlaneGeometry(1, hei)
      const material = new THREE.MeshBasicMaterial({
        map: this.textures,
        depthTest: false, //不显示黑色
        transparent: true,
        side: THREE.DoubleSide
        // color: 'red'
      })
      const plane = new THREE.Mesh(geometry, material)
      plane.position.set(x, y, z + hei / 2)
      plane.rotation.x = Math.PI / 2
      const plane2 = plane.clone()
      plane2.rotation.y = Math.PI / 2
      return [plane, plane2]
    },
  • 想要实现不同角度都能看的同样图片的效果需要用SpriteMaterial精灵材料
  • 关键代码

   drawPlane(x, y, z, value, i) {
      return new Promise((resolve, reject) => {
        let arr = []
        const hei = value / 30
        /*1、创建一个画布,记得设置画布的宽高,否则将使用默认宽高,有可能会导致图像显示变形*/
        let canvas = document.createElement('canvas')
        canvas.width = 64
        canvas.height = 128
        /*2、创建图形,这部分可以去看w3c canvas教程*/
        let ctx = canvas.getContext('2d')
        var img = new Image()
        img.src = this.img3
        img.onload = function() {
          // 将图片画到canvas上面上去!
          ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
          // /*3、将canvas作为纹理,创建Sprite*/
          let texture = new THREE.Texture(canvas)
          texture.needsUpdate = true //注意这句不能少
          let material = new THREE.SpriteMaterial({
            map: texture,
            depthTest: false,
            rotation: 0,
            transparent: true,
            sizeAttenuation: false
          })
          var plane1 = new THREE.Sprite(material)
          plane1.position.set(x, y, z + 0.6)
          plane1.scale.set(1, 1.1, 1.1)
          var plane2 = plane1.clone()
          arr.push(plane1)
          arr.push(plane2)
          resolve(arr)
        }
      })
    },
  • drawPlane方法只是给大家提供一个思路。写完这个后,发现图标还是在不同的角度会有模糊的现象,这时需要把地图模型的 transparent: false,设置一下,这一步很重要!!!!一定要检查
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值