在react中利用three.js 渲染模型 让鼠标拖拽是模型转动

javascript 复制代码
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';

 useEffect(() => {
  // 初始化OrbitControls
  const controls = new OrbitControls(camera, renderer.domElement); 
  // 设置控制参数
  controls.enableDamping = true; // 平滑化运动
  controls.dampingFactor = 0.05;
  controls.screenSpacePanning = false;
  controls.minDistance = 10;
  controls.maxDistance = 200;//缩放最大距离
  controls.minAzimuthAngle = -Math.PI / 4; // 最小方位角
  controls.maxAzimuthAngle = Math.PI / 4; // 最大方位角
  controls.minPolarAngle =-Math.PI/6;; // 允许相机向上看
  controls.maxPolarAngle = Math.PI/3; // 允许相机向下看直到正下方
  controls.addEventListener('start', (event) => {

  });
  controls.addEventListener('end', (event) => {
    console.log('Interaction ended.',event);
   
  });
  // 注册zoom事件
  controls.addEventListener('zoom', function() {
    console.log('Zooming');
 
  });
})

利用OrbitControls 实现模型转动放大缩小等功能,这是three里带的 所以用起来比较顺畅一些。

下面可以设置他放打缩小的限制已经 转动的角度。

所有的代码包括渲染代码我上一篇文章有写到渲染代码。都是写在了useEffect中,否则页面标签没有渲染完去渲染模型,会报错。

相关推荐
桂月二二10 分钟前
基于模块联邦的微前端架构:重构大型前端应用的模块化边界
前端·重构·架构
jay丿32 分钟前
Django简介
javascript
前端没钱1 小时前
日报列表滚动到哪里、哪里就自动变成已读状态
前端·vue.js
bigyoung1 小时前
告警 Detected multiple renderers concurrently rendering the same context provider
react.js·前端框架
想尝一尝被打赏的味道1 小时前
uniapp在app下使用mqtt协议!!!支持vue3
javascript·vue.js·uni-app
lc_front_developer1 小时前
为什么使用Knex 做为 Express 中操作 MySQL 数据库的方案?
前端·node.js
cc.ChenLy1 小时前
vue框架后遗症∶被遗忘的dom操作
javascript·vue.js
Python私教1 小时前
Flutter 实现抖音风格底部导航栏
android·开发语言·javascript
❆VE❆2 小时前
vue3: directive自定义指令防止重复点击
前端·javascript·vue.js·自定义指令·directive
布兰妮甜2 小时前
Fetch API 与 XMLHttpRequest:深入剖析异步请求的利器
前端·javascript·xmlhttprequest·fetch api