Three.js欧拉对象Euler和四元数Quaternion

迭代根系
• 阅读 4960

Three.js欧拉对象Euler和四元数Quaternion

欧拉对象和四元数主要用来表达对象的旋转信息。

关键词:欧拉Euler、四元数Quaternion、矩阵Matrix4

个人WebGL/Three.js技术博客

欧拉对象Euler

构造函数:Euler(x,y,z,order)
参数xyz分别表示绕xyz轴旋转的角度值,角度单位是弧度。参数order表示旋转顺序,默认值XYZ,也可以设置为YXZYZX等值

// 创建一个欧拉对象,表示绕着xyz轴分别旋转45度,0度,90度
var Euler = new THREE.Euler( Math.PI/4,0, Math.PI/2);

设置欧拉对象的

var Euler = new THREE.Euler();
Euler.x = Math.PI/4;
Euler.y = Math.PI/2;
Euler.z = Math.PI/4;

四元数Quaternion

四元数对象Quaternion使用x、y、z和w四个分量表示。

var quaternion = new THREE.Quaternion();
console.log('查看四元数结构',quaternion);
console.log('查看四元数w分量',quaternion.w);

四元数方法.setFromAxisAngle()

四元数的方法.setFromAxisAngle(axis, angle)通过旋转轴axis和旋转角度angle设置四元数数据,也就是x、y、z和w四个分量。

绕单位向量Vector3(x,y,z)表示的轴旋转θ度

k = sinθ/2

q=( xk , yk , z*k, cosθ/2)

var quaternion = new THREE.Quaternion();
// 旋转轴new THREE.Vector3(0,1,0)
// 旋转角度Math.PI/2
quaternion.setFromAxisAngle(new THREE.Vector3(0,1,0),Math.PI/2)
console.log('查看四元数结构',quaternion);

四元数乘法.multiply()

对象的一个旋转可以用一个四元数表示,两次连续旋转可以理解为两次旋转对应的四元数对象进行乘法运算。

// 四元数q1、q2分别表示一个旋转,两个四元数进行乘法运算,相乘结果保存在q2中
// 在q1表示的旋转基础在进行q2表示的旋转操作
q1.quaternion.multiply( q2 );

欧拉、四元数和矩阵转化

欧拉对象、四元数对象和旋转矩阵可以相关转化,都可以表示旋转变换。

Matrix4.makeRotationFromQuaternion(q)

通过矩阵对象Matrix4.makeRotationFromQuaternion(q)方法可以把四元数转化对应的矩阵对象。

quaternion.setFromEuler(Euler)

通过欧拉对象设置四元数对象

Euler.setFromQuaternion(quaternion)

四元数转化为欧拉对象

Object3D

Object3D对象角度属性.rotation的值是欧拉对象Euler,四元数属性.quaternion的值是四元数对象Quaternion

执行Object3D对象旋转方法,会同时改变对象的角度属性和四元数属性。四元数属性和位置.position、缩放属性.scale一样会转化为对象的本地矩阵属性.matrix,本地矩阵属性值包含了旋转矩阵、缩放矩阵、平移矩阵。

Object3D对象角度属性.rotation和四元数属性.quaternion是相互关联的一个改变会同时改变另一个。

// 一个网格模型对象,基类是Object3D
var mesh = new THREE.Mesh()
// 绕z轴旋转
mesh.rotateZ(Math.PI)

console.log('查看角度属性rotation',mesh.rotation);
console.log('查看四元数属性quaternion',mesh.quaternion);

.rotateOnAxis(axis, angle)表示绕绕着任意方向某个轴axis旋转一定角度angle,绕X、Y和Z轴旋转对应的方法分别是rotateX()rotateY()rotateZ(),绕着XYZ特定轴旋转的方法是基于.rotateOnAxis()方法实现的。

// Object3D.js源码
rotateOnAxis: function () {
  var q1 = new Quaternion();
// 旋转轴axis,旋转角度angle
  return function rotateOnAxis( axis, angle ) {
// 通过旋转轴和旋转角度设置四元数的xyzw分量
    q1.setFromAxisAngle( axis, angle );
// Object3D对象的四元数属性和四元数q1相乘
    this.quaternion.multiply( q1 );

    return this;

  };

}(),
点赞
收藏
评论区
推荐文章
虾米大王 虾米大王
2年前
java代码034
code034.jspPage对象各方法的应用getClass():hashCode:toString():与object对象比较:与this对象比较:
虾米大王 虾米大王
2年前
java代码035
code035.jsp使用exception对象获取异常信息
虾米大王 虾米大王
3年前
java代码013
code013.jsprequest对象获取请求参数处理页
Wesley13 Wesley13
3年前
MATLAB常微分方程数值解——欧拉法、改进的欧拉法与四阶龙格库塔方法
MATLAB常微分方程数值解作者:凯鲁嘎吉博客园 http://www.cnblogs.com/kailugaji/(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.cnblogs.com%2Fkailugaji%2F)1.一阶
Stella981 Stella981
3年前
Foreground
10个月前,我写了一篇解读欧拉影像放大技术的文章EulerianVideoMagnification,这篇文章自发布以来,点击率超过了1300次,评论数达到了29篇。如果你在baidu上搜索“EulerianVideoMagnification”,我的文章排在第二名(第一名是原论文的链接)。而如果你在google或baidu上搜索“欧
Wesley13 Wesley13
3年前
MySQL分组并取每组中create_time字段的最大值, 及这条记录的所有值(理解groupId, 很容易误导)
invest\_order\_code排查单号求获取排查单号相同数大于1的排查单号SELECTinvest_order_codeFROMt_invest_orderGROUPBYinvest_order_codeHAVINGCOUNT(invest_order_code)1求排查单未PC2019042909252998
铁扇公主 铁扇公主
1年前
Mac端英语学习工具推荐 Eudic欧路词典激活中文版
Eudic欧路词典是一款专为Mac系统开发的词典软件。它不仅内置了常用英汉词条和多部专业词条,支持加载多种词典格式,还可以打开众多网友制作的大量精美词典库。同时,Eudic欧路词典支持百度、有道、AmericanHeitage等多部在线词典。Eudic欧路
专注IP定位 专注IP定位
3年前
互联网拓扑是怎样构成的?又代表了什么?
数学家和物理学家在研究网络的时候,为了抓住本质,通常进行一定的抽象,表现在既不关心节点的特定物理位置、大小,也不在意边的长短、曲直、相交与否,只关心节点和节点间是否相连。例如,欧拉在解决哥尼斯堡七桥问题的时候,虽然1736年讨论长短大小的几何学是主流,而不考虑长短大小、不牵涉量计算的情形几乎没人研究,但他却撇开研究对象的长短、大小、面积、体积等度量性质和数量
天翼云发布基于欧拉双版本的自研操作系统——CTyunOS
4月1315日,一年一度的欧拉开发者大会(openEulerDeveloperDay2022)在线上和线下同步举办。据了解,这是继去年11月,欧拉正式捐赠之后的首次社区开发者大会。  值得注意的是,中国电信天翼云作为openEuler开源社区的理事会成员,已经与社区开展关键技术的联合创新,目前已在内核、用户热补丁,Openstack等几个方面开展深入研
天翼云为欧拉社区贡献首个C++热补丁 加速推进联创技术落地应用
天翼云与欧拉社区开展关键技术联合创新热补丁实现主机崩溃在线修复天翼云与欧拉社区共研支持aarch64及x86平台libcareplus热补丁功能近日,中国电信天翼云基础架构技术团队与openEuler社区合作共研了全面支持aarch64及x86平台的libcareplus热补丁功能,并为欧拉社区贡献首个C热补丁,实现主机崩溃在线修复。这是天翼云与欧拉
机器学习入门指南
资料获取地址见文末或评论!一、预备知识微积分(偏导数、梯度等等)概率论与数理统计(例如极大似然估计、中央极限定理、大数法则等等)最优化方法(比如梯度下降、牛顿拉普什方法、变分法(欧拉拉格朗日方程)、凸优化等等)二、路线1(基于普通最小二乘法的)简单线性回归线性回归中的新进展(岭回归和LASSO回归)(此处可以插入Bagging和AdaBoost的内容