three.js中自带围绕X,Y,Z轴旋转的api,但要想实现任一方向的中心旋转功能尚未找到简单易懂的资料以供参考。

起初想到的是能否借助四元数来实现?但是四元数还是不太友好,不太容易理解。在吃饭反途中灵光一现,之前看到过有网友借助group实现了中心的自定义,是否同样能借助group来实现旋转轴的自定义呢?

想到这里,顿时激动起来。跑会机房开始验证。

果然可以实现!

原理很简单,借助已有的api即可实现。

首先创建模型,并将其加入一个group中

 let cloud= creatPointCloudByGeometry(geom);
 let group=new THREE.Group();group.position.set(0,0,0);group.add(cloud);

通过模型自带的旋转api控制模型围绕自身的哪个轴旋转,即确定相对自身的旋转方向。

cloud.rotation.x += gui.x;
cloud.rotation.y += gui.y;
cloud.rotation.z += gui.z;

通过旋转group实现模型的旋转相对于场景方向的控制

 group.rotation.x=gui.GroupX;group.rotation.y=gui.GroupY;group.rotation.z=gui.GroupZ;

这是我的render函数

function render(){group.rotation.x=gui.GroupX;group.rotation.y=gui.GroupY;group.rotation.z=gui.GroupZ;if(gui.rotation){cloud.rotation.x += gui.x;cloud.rotation.y += gui.y;cloud.rotation.z += gui.z;}renderer.render(scene,camera);requestAnimationFrame(render);}

通过dat.gui实现参数的调节,效果很不错。


总结:本方法借助已有的api实现了对任意轴的中心旋转功能。

思路:

1.通过模型的旋转api确定模型相对自身的旋转方向;

2.通过group的旋转控制模型相对场景的方向

THREE.JS自定义中心旋转轴相关推荐

  1. 原生html js css绘制折现图,HTML5教程 Chart.js自定义提示折线图

    本篇教程探讨了HTML5教程 Chart.js自定义提示折线图,希望阅读本篇文章以后大家有所收获,帮助大家HTML5+CSS3从入门到精通 . < var randomScalingFactor ...

  2. js自定义函数及参数问题

    js自定义函数的过程中,往往我们希望指定一些参数的默认值 很容易的会写出如下的js 方法 function test(a,b,c=1,d='id'){ return 1; } 但是定义完之后,浏览器会 ...

  3. html 自定义js,js 自定义事件

    js怎么自定义事件,并能让用on事件监听 你这个问题全部内容应该是如下吧: 在视频播放的时候,能够用on监听事件的触发,如下: player.on('pause',function(){ consol ...

  4. Ajax异步请求(重渲染DOM元素时,如何自动调用并执行JS自定义函数【含代码】)- 案例篇

    文章目录 Ajax异步请求(重渲染DOM元素时,如何自动调用并执行JS自定义函数[含代码])- 案例篇 效果截图: 重要代码: 附:全部HTML代码: Ajax异步请求(重渲染DOM元素时,如何自动调 ...

  5. Vue.js自定义指令的用法与实例

    市面上大多数关于Vue.js自定义指令的文章都在讲语法,很少讲实际的应用场景和用例,以致于即便明白了怎么写,也不知道怎么用.本文不讲语法,就讲自定义指令的用法. 自定义指令是用来操作DOM的.尽管Vu ...

  6. Vue+bpmn.js自定义流程图之palette(二)

    自定义bpmn.js左侧工具栏palette样式 一.回顾 1.预览 2.目录结构 二.代码 1.paletteProvider.js文件 2.css文件 3.index.js文件 三.总结 一.回顾 ...

  7. js:Vue.js自定义指令实现scroll下滑滚动翻页

    Vue.js自定义指令实现scroll下滑滚动翻页 核心代码 import Vue from 'vue'// v-scroll Vue.directive('scroll', {bind(el, bi ...

  8. Bpmn.js自定义文件说明

    Bpmn.js自定义文件说明 由于工作需要(其实不是很需要),在公司项目的基础上开源了一个基于 bpmn-js + Vue 2.x + ElementUI 的一个流程编辑器 Bpmn Process ...

  9. JS 自定义实现数字滚动处理

    一.浏览器端js自定义实现数字滚动 使用示例: <!DOCTYPE html> <html lang="en"><head><meta c ...

  10. js自定义随机16进制颜色

    js自定义随机16进制颜色 function colorfn() {let str = Math.random().toString().slice(2, 8);if (str.length < ...

最新文章

  1. php表单退出怎么写,PHP提交表单失败后如何保留填写的信息
  2. 卷起来了,写了一套计算机视觉学习笔记(20G/代码/PPT/视频)
  3. centos下升级glib
  4. iOS高级音频的设置项
  5. Bit-Z转入GXS、PPS、SPHTX、EOS未到账解决方案
  6. IJCAI 2021 ICAPS 2021自动强化学习挑战赛正式开赛
  7. 云昆明理工大学 计算机复试,2012年昆明理工大学计算机考研复试试题(回忆版)...
  8. C语言学习及应用笔记之二:C语言static关键字及其使用
  9. Java隐含对象实验报告,JSP隐含对象response实现文件下载
  10. SQL Server 数据库中的几个常见的临界值
  11. rhel7 mysql无法运行_redhat7下mysql5.7.12重启电脑后起不来问题
  12. 表达、思考和解决问题的逻辑(金字塔原理-高质量读书笔记)
  13. android selector 的item/不能是空节点
  14. 985 硕士待业200天,工作 10 年存款 2W : 累死你的不是工作,而是“选择”
  15. linux vi 底行命令,Linux下vi命令详解
  16. TFIDF算法Java实现
  17. html文字效果简书,css3实现动态流光文字效果
  18. 超越传统微调!Meta新作VPT:视觉Prompt来了!冻结主干,仅调节1%参数,性能提升显著!...
  19. Linux perf 1.4、hardware events
  20. Manjaro快速上手指南-微信、TIM/QQ、网易云音乐、WPS等等

热门文章

  1. vue-cli-service build 如何环境设置,打出不同环境的包
  2. 输入一个大写字母,打印菱形
  3. 压缩视频 HandBrake软件
  4. 计算机mac地址和另一台一样,电脑mac地址有多个怎么办
  5. H3C交换机对接思科交换机
  6. 基于CNN的人脸 性别、年龄识别
  7. Execution failed for task ':app:processDebugResources'. No slave process to process jobs, aborting
  8. 练习 fullpage
  9. 通信协议之序列化——TLV详解
  10. python重写和重载的区别_(C#)重载和重写的区别