Three.js如何设置旋转轴心【PIVOT】

2024-01-10 14:36
文章标签 设置 js three pivot 旋转轴

本文主要是介绍Three.js如何设置旋转轴心【PIVOT】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在使用Three.js开发3D应用时,经常碰到的一个问题就是如何自定义模型的旋转轴心(pivot)。例如下面的立方体,假设建模时的轴心在立方体的中心,但是如果希望立方体绕着某个指定的点旋转(例如图中标红的顶点)该怎么办?

本文将给出两种解决方案:使用Group对象、使用three.pivot.js开发包。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包

1、使用Group对象

一个简单的解决方案是创建一个组(Group)并将网格添加到组中,然后围绕该组旋转。让我们通过实例看一下如何实现。

首先创建网格并添加到场景中:

const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0xff0000 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube)

现在,它只会绕其中心旋转:

cube.rotation.z = Math.PI / 4

现在创建一个新的组对象并将立方体网格加入组对象:

const group = new THREE.Group();
group.add(cube)
scene.add(group)

此时我们又回到了起点。 现在移动网格:

cube.position.set(0.5,0.5,0)

然后移动组:

group.position.set(-0.5, -0.5, 0)

现在使用组对象进行旋转:

group.rotation.z = Math.PI / 4

搞定!

2、使用three.pivot开发包

使用组对象来调整3D模型的旋转轴心有点麻烦,尤其是当你的场景层级复杂时。更好的解决方案是使用three.pivot.js这个开发包,可以任意设置3D模型的旋转轴心,而且不会改变场景的层级结构:

https://tools.nsdt.cloud/three-pivot

three.pivot.js的使用很简单,导入后使用其 setPivotPoint() 方法设置轴心点即可:

import ThreePiovt from 'three.pivot.js';ThreePivot.setPivotPoint(mesh, new THREE.Vector(-0.5,-0.5,-0.5));

three.pivot.js开发包官方下载地址:NSDT three.pivot.js 。

下面是更完整的演示代码:

import * as THREE from 'three'
import ThreePiovt from './three.pivot.js';.... 省略 render 代码/**创建旋转立方体 cubeRota, 并且应用 three.pivot对立方体设置旋转轴心**/createBox() {// 创建参考立方体 位于原点位置const geometry = new THREE.BoxGeometry(1, 1, 1);const material = new THREE.MeshBasicMaterial({ color: 0xffffff });const cube = new THREE.Mesh(geometry, material);this.scene.add(cube)// 创建旋转立方体 const geometryRota = geometry.clone();const cubeMeaterial = new THREE.MeshStandardMaterial({color: 0xff0000})const cubeRota = new THREE.Mesh(geometryRota, cubeMeaterial);cubeRota.name = 'cubeRota'this.cubeRota = cubeRota;this.scene.add(cubeRota);// 设置旋转轴心const pivotPosition = new THREE.Vector3(-0.5,-0.5,-0.5);ThreePivot.setPivotPoint(cubeRota,pivotPosition);}/** 在animate函数中动态的调整立方体沿y轴的旋转角度**/animate() {this.angle += Math.PI / 180;this.cubeRota.rotation.y = this.anglerequestAnimationFrame(this.animate);if (this.stats) this.stats.update();if (this.controls) this.controls.update();this.renderer.render(this.scene, this.camera);}

原文链接:THREE.JS设置旋转轴心 - BimAnt

这篇关于Three.js如何设置旋转轴心【PIVOT】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/591133

相关文章

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

Pandas透视表(Pivot Table)的具体使用

《Pandas透视表(PivotTable)的具体使用》透视表用于在数据分析和处理过程中进行数据重塑和汇总,本文就来介绍一下Pandas透视表(PivotTable)的具体使用,感兴趣的可以了解一下... 目录前言什么是透视表?使用步骤1. 引入必要的库2. 读取数据3. 创建透视表4. 查看透视表总结前言

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF