基于three.js构建3D全景图

以最简单的方式实现3D全景色

import * as THREE from 'three'
import {OrbitControls} from './OrbitControls'

export class Panorama {
  constructor (renderer, camera, scene) {
    this.renderer = renderer
    this.camera = camera
    this.scene = scene
    this.init()
  }

  init () {
    this.initRenderer()
    this.initScene()
    this.initCamera()
    this.initGeometry()
    this.initControls()
  }

  initRenderer () {
    this.renderer = new THREE.WebGLRenderer()
    this.renderer.setSize(window.innerWidth, window.innerHeight)
    document.body.appendChild(this.renderer.domElement)
  }

  initScene () {
    this.scene = new THREE.Scene()
  }

  initCamera () {
    this.camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000)
    this.camera.position.z = 800
  }

  initGeometry () {
    const geometry = new THREE.BoxGeometry(800, 800, 800)
    const textureLoader = new THREE.TextureLoader()
    const imgArr = [
      require('../assets/posx.jpg'),
      require('../assets/negx.jpg'),
      require('../assets/posy.jpg'),
      require('../assets/negy.jpg'),
      require('../assets/posz.jpg'),
      require('../assets/negz.jpg')
    ]
    let material = []
    for (let i = 0; i < imgArr.length; i++) {
      material.push(
        new THREE.MeshBasicMaterial({
          map: textureLoader.load(imgArr[i]), side: THREE.DoubleSide
        })
      )
    }

    const mesh = new THREE.Mesh(geometry, material)
    this.scene.add(mesh)
  }

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

  initControls () {
    const controls = new OrbitControls(this.camera, this.renderer.domElement)
    controls.addEventListener('change', this.animate())
  }
}

注:重点处理柱状图的坐标包含或者等于你的相机的坐标。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值