vue中使用threejs的一些问题,THREE上没有OrbitControls

记录一下在vue中使用threejs遇到的一些问题
1、three对象身上没有OrbitControls
最简单的方法
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
其他方案
  • 使用 @three-ts/orbit-controls, ts项目也能正常使用
  • 安装
npm install --save @three-ts/orbit-controls
  • 使用
import * as THREE from 'three';
import { OrbitControls } from '@three-ts/orbit-controls';

const camera = new THREE.SomeCamera(...);
const controls = new OrbitControls(camera, renderer.domElement);
// 照常使用即可

也可以直接看npm原文

在此之前也试过其他包, three-orbit-controls, three-orbitcontrols-ts
但是时间都比较久了,我没成功。

还有其他方法https://github.com/mrdoob/three.js/blob/master/examples/js/controls/OrbitControls.js 下载OrbitControls源码然后自己改改,并不复杂(亲测有效)

下载后可以看见,大致内容就是一个立即执行函数, 并向THREE添加了2个对象,该文件没有引入其他文件

  1. 文件用到了THREE, 所以先在文件头引入 THREE
import * as THREE from 'three'
  1. 删除外包立即执行函数(首行,尾行)
  2. 删除(使用ts时不删除会有警告)
1107行  THREE.MapControls = MapControls
1108行 THREE.OrbitControls = OrbitControls
  1. 末尾导出文件中定义的对象,MapControls, OrbitControls
export { MapControls, OrbitControls }

使用:import { OrbitControls } from './OrbitControls.js'

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Vue使用Three.js将鱼眼图变为全景图,需要经过以下步骤: 1.导入Three.js库和相关组件。 ``` import * as THREE from 'three' import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls' import { FishEyeShader } from 'three/examples/jsm/shaders/FishEyeShader' ``` 2.创建一个Three.js场景和相机。 ``` let scene = new THREE.Scene() let camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000) camera.position.set(0, 0, 0) scene.add(camera) ``` 3.创建一个立方体纹理,并将其放入一个立方体几何模型。 ``` let image = new THREE.TextureLoader().load('path/to/fisheye-image.jpg') let materialArray = [ new THREE.MeshBasicMaterial({map: image}), new THREE.MeshBasicMaterial({map: image}), new THREE.MeshBasicMaterial({map: image}), new THREE.MeshBasicMaterial({map: image}), new THREE.MeshBasicMaterial({map: image}), new THREE.MeshBasicMaterial({map: image}) ] let skyGeometry = new THREE.BoxGeometry(1000, 1000, 1000) let sky = new THREE.Mesh(skyGeometry, materialArray) sky.material.side = THREE.BackSide scene.add(sky) ``` 4.创建一个渲染器,并将其添加到Vue组件。 ``` let renderer = new THREE.WebGLRenderer() renderer.setSize(window.innerWidth, window.innerHeight) let container = document.getElementById('container') container.appendChild(renderer.domElement) ``` 5.创建一个FishEye着色器,并将其应用于场景的立方体模型。 ``` let fishEyeShader = FishEyeShader let fishEyeUniforms = THREE.UniformsUtils.clone(fishEyeShader.uniforms) fishEyeUniforms['strength'].value = 0.5 let fishEyeMaterial = new THREE.ShaderMaterial({ uniforms: fishEyeUniforms, vertexShader: fishEyeShader.vertexShader, fragmentShader: fishEyeShader.fragmentShader }) sky.material = fishEyeMaterial ``` 6.使用OrbitControls控件来控制相机的旋转。 ``` let controls = new OrbitControls(camera, renderer.domElement) controls.enableDamping = true controls.dampingFactor = 0.05 controls.rotateSpeed = 0.5 controls.update() ``` 7.在Vue组件的mounted生命周期钩子函数,调用渲染器的render()方法来渲染场景。 ``` mounted() { this.animate() }, methods: { animate() { requestAnimationFrame(this.animate) this.renderer.render(this.scene, this.camera) } } ``` 完成以上步骤后,你就可以在Vue使用Three.js将鱼眼图变为全景图了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

v西瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值