上传本地pcd文件,并用threejs渲染

项目背景:

pcd文件很大,如果是本地的文件,上传到网络再下载下来,会造成网络流量的极大浪费。那么我直接加载本地的(当前计算机上的pcd文件)用来显示,会大大提高网络效率。

上代码:

<template>
  <div>
    <input type="file" @change="handleFileUpload" accept=".pcd" />
    <div ref="viewer"></div>
  </div>
</template>

<script>
import * as THREE from 'three';
import { PCDLoader } from 'three/examples/jsm/loaders/PCDLoader.js' // 注意是examples/jsm

export default {
  data() {
    return {
      pointCloud: null,
    };
  },
  methods: {
    handleFileUpload(event) {
      const file = event.target.files[0];
      if (!file) return;

      const scene = new THREE.Scene();
      const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
      const renderer = new THREE.WebGLRenderer();
      renderer.setSize(window.innerWidth, window.innerHeight);
      this.$refs.viewer.innerHTML = '';
      this.$refs.viewer.appendChild(renderer.domElement);

      camera.position.z = 5;

      const loader = new PCDLoader();
      loader.load(URL.createObjectURL(file), (loadedPointCloud) => {
        if (this.pointCloud) {
          scene.remove(this.pointCloud);
        }

        this.pointCloud = loadedPointCloud;
        scene.add(this.pointCloud);

        const animate = () => {
          requestAnimationFrame(animate);
          renderer.render(scene, camera);
        };

        animate();
      });
    },
  },
};
</script>


说明:两个知识点
1)用input上传文件,生成新路径 URL.createObjectURL(file),
2)用pcd加载器PCDLoader,渲染pcd文件

失败的尝试:
用FileReader来直接获取到文件二进制形式的内容,进行threejs的渲染,但是会报数据格式问题,无法渲染。分析了下pcdloader源码,其中对无效数据进行了处理。

const file = event.target.files[0]
      const reader = new FileReader()
      reader.addEventListener(
        'load',
        () => {
          console.log(reader.result)
         },
        false
      )
      reader.readAsArrayBuffer(file)
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值