一、效果展示

需要实现的功能,对已经加载进小程序里的模型进行沿着xyz轴方向去旋转和平移。

如下图的效果: 点击底部的按钮,对模型进行平移和旋转操作。

二、方法描述

关于平移和旋转的方法
比如沿着 Y 轴平移,就是 translateY,
沿着 Z 轴平移,就是 translateZ,
沿着 X 轴平移,就是 translateX

绕着 Y 轴旋转,就是 rotateY,
绕着 Z 轴旋转,就是 rotateZ,
绕着 X 轴旋转,就是 rotateX,

而我们要做到整个视觉上整个模型都在平移和旋转,就需要对摄像机进行平移和旋转操作。

三、步骤概述
(1)在加载完模型的基础上,将摄像机放入一三维物体里,对此三维物体进行平移和旋转。不直接操作摄像机的原因是,我们最终要将视角复位到没有旋转前的操作。(点击查看上一篇如何加载外 3d加载模型)

//设置相机let camera = new THREE.PerspectiveCamera(45, canvas.width / canvas.height, 0.25, 100);camera.position.set(0, 4, 15);camera.lookAt(new THREE.Vector3(0, 0, 0));scene = new THREE.Scene();//将相机放一个三维物体里let camera_parent = new THREE.Object3D(); camera_parent.position.set(0, 0, 0);camera_parent.add(camera);scene.add(camera_parent);

(2)平移和旋转的操作
用一变量存平移了多少,此变量用于最后复位时。使用 translateY 方法,将放摄像机的三维物体进行上下平移。
再用一变量存旋转了多少,此变量用于最后复位时。使用 rotateX 方法,将放摄像机的三维物体进行上下旋转。
注意:得保证模型的 z 轴是垂直于屏幕, x 和 y 轴是平行于屏幕且垂直于 z 轴,,才能做到,上下左右移动和上下左右旋转,否则就会偏斜。

// 查看 xyz 轴的标线var axes = new THREE.AxisHelper(30);scene.add(axes);
 // 单击 上下平移translateUpDown: function (event) {var type = event.currentTarget.dataset.index;if (type == "0") {camera_parent.translateY(-1);//沿着y轴正方向平移tranAngleUpDown = tranAngleUpDown + 1;} else {camera_parent.translateY(1);//沿着y轴反方向平移tranAngleUpDown = tranAngleUpDown - 1;}},
//单击 上下旋转rotateUpDown: function (event) {var type = event.currentTarget.dataset.index;if (type == "0") {camera_parent.rotateY((5 / 180) * Math.PI); //向上旋转angleUpDown = angleUpDown - (5 / 180) * Math.PI;} else {camera_parent.rotateX(-(5 / 180) * Math.PI); //向下旋转angleUpDown = angleUpDown + (5 / 180) * Math.PI;}},

其中包括长按进行连续旋转,连续平移

// 长按连续旋转rotateAnimate: function (event) {this.setData({iconShow: 1})let that = this;var type = event.currentTarget.dataset.index;if (type == "0") {camera_parent.rotateY((5 / 180) * Math.PI); //向左旋转angle = angle - (5 / 180) * Math.PI;} else {camera_parent.rotateY(-(5 / 180) * Math.PI); //向右旋转angle = angle + (5 / 180) * Math.PI;}let timerAnimate = setTimeout(function () {that.rotateAnimate(event);}, 100)//触摸停止,清除if (that.data.touchEnd == 0) {clearTimeout(timerAnimate);}},

完整代码可上GitHub查看:点击这里
或者CSDN积分下载:点击这里

【Threejs 微信小程序】小程序加载外部模型后对模型进行平移旋转操作相关推荐

  1. Three.js中加载外部fbx格式的模型素材

    index.html: index.js: scene.js:

  2. 微信小程序图标不支持html,微信小程序实现自定义加载图标功能

    效果图 实现思路 1.首先通过HTML+CSS实现加载动画的静态效果: 2.根据需求给每个动画设计不同的动画效果. 例如第一个加载图标的静态绘制 1.首先确定动画的盒子宽高: 2.设置盒子中每一个长方 ...

  3. 微信小程序之下拉加载和上拉刷新

    微信小程序之下拉加载和上拉刷新 微信小程序下拉加载和上拉刷新两种实现方法 方法一:onPullDownRefresh和onReachBottom方法实现小程序下拉加载和上拉刷新 首先要在json文件里 ...

  4. Android 仿微信小程序开屏页加载loading

    Android 仿微信小程序开屏页加载loading 废话不多说,先上效果图~ 首先就是底层有一个灰色的圆,然后按照圆形的轨迹进行绘制. 啊~说那么多也没用,还是直接上代码吧,哈哈哈哈 绘制底部圆形及 ...

  5. 【微信小程序】自定义加载动画3

    目录 效果图 配置 版本1 版本2 结语 效果图 配置 配置方法参考上一篇文章:[微信小程序]自定义加载动画 版本1 Component({behaviors

  6. 【微信小程序】自定义加载动画4

    目录 效果图 配置文件 结语 效果图 配置文件 配置方法参考上一篇文章:[微信小程序]自定义加载动画 组件源代码: Component({behaviors: [],properties: {

  7. 微信小程序之分包加载,解决代码超过2M的方法

    2017.01.09 小程序上线时,微信限制了代码包不能超过1MB 大小,(现在是2M了)限制大小是出于对小程序启动速度的考虑,希望用户在使用任何一款小程序时,都能获得一种"秒开" ...

  8. 今天突然发现,微信小程序手机访问正常,PC端访问小程序图片无法加载?

    今天突然发现,微信小程序手机访问正常,PC端访问小程序图片无法加载? 所有图片在pc上查看都无法显示. 然后使用抓包工具抓包,pc端图片全部403,结果为 AccessDenied You are d ...

  9. 微信小程序封装懒加载图片

    微信小程序封装懒加载图片 js /components/LazyImage/index.js // components/LazyImage/index.js Component({/*** 组件的属 ...

  10. 微信小程序上拉加载更多

    微信小程序上拉加载更多 无论是微信小程序还是其他前端框架,都会遇到上拉加载(懒加载)和下拉刷新这种问题.其实理清楚什么时候请求数据.请求返回的几种情况,那么做这个懒加载就很简单了. 一.首先,固定一个 ...

最新文章

  1. Nginx学习之五:Nginx第三方模块
  2. 对python装饰器几种常见方式的使用与理解
  3. Win7删除休眠文件
  4. 查询Linux系统网卡流量负载,超好用linux系统查询网卡等流量参数的工具,分享给大家!!!...
  5. linux(3):Linux MBR分区、挂载操作步骤,逻辑卷扩容操作
  6. java 显示透明背景png图片
  7. python sanic_如何使用Python和Sanic使代码快速异步
  8. 数据结构:二叉排序树
  9. Java web servers 间是如何实现 session 同步的
  10. python 遍历对象_Python遍历对象属性
  11. 微分方程数值解法(1)——常微分方程初值问题的数值解法
  12. matlab 矩阵线性规划,matlab线性规划-线性规划,matlab
  13. 使用IP-guard补丁分发批处理脚本实现分发补丁
  14. 使用canvas将多张图片合并为一张
  15. pip安装tensorflow由于网速不好一直下载中断的问题解决
  16. java中的Stream
  17. C++20,说说 Module 那点事儿
  18. 关于列表的“切片”操作
  19. 京东市值达4600亿元创历史新高
  20. vue3中使用swiper7

热门文章

  1. 6----编程计算个人所得税
  2. 华为鲲鹏服务器安装 k3s+rancher
  3. 轻松实现文档转换的word转pdf转换器
  4. JVM-HotSpot虚拟机-即时编译器、编译优化等相关知识
  5. Javo House 地产置业 WordPress主题[v1.7]
  6. Java与C、C++的10大区别-总结
  7. Payment:支付宝手机网站支付教程
  8. Oracle安装时 [INS-32025] 所选安装与指定oracle主目录中已安装的软件冲突
  9. 独上高楼, 望尽天涯路 . (路在前方)
  10. 卡片式列表(Card List)CSS样式效果