three.js中的矩阵计算

简介: three.js中的矩阵计算

three.js中的矩阵计算

目录

1. 概述

three.js中自带了矩阵运算库,不过在使用的过程中总是容易混淆。不知道是行主序还是列主序,前乘和后乘也很容易弄反。就在这里辨析一下。

2. 详论

2.1. 行主序与列主序列

很早就知道OpenGL中使用的矩阵是列主序,而Direct3D中使用的是行主序,但是没什么具体的体会,还直接弄混淆了。应该来说,无论Direct3D还是OpenGL,使用的矩阵应该都能线性代数中描述的矩阵是等价的,只不过存储方式不同。矩阵在编程实现中一般会表示成数组的形式,以线性代数中描述的矩阵为标准,行主序就是依次按行存储,而列主序就是依次按列存储。

在threeJS中:

var A = new THREE.Matrix4();
A.set(1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16);
console.log(A);
var B = new THREE.Matrix4();
B.set(16, 15, 14, 13,
    12, 11, 10, 9,
    8, 7, 6, 5,
    4, 3, 2, 1);
console.log(B);
var C = new THREE.Matrix4();
C.multiplyMatrices (A, B);    
console.log(C);

其运行结果为:

在网上找一个在线矩阵计算器,相对应的计算结果如下:

因此可以认为,threejs矩阵内部储存形式为列主序,表达和描述的仍然是线性代数中行主序,set()函数就是以行主序接受矩阵参数的。

2.2. 矩阵乘法

前面用到的矩阵乘法是新建了一个矩阵,调用multiplyMatrices。threejs矩阵还有前乘和后乘的区别,也很容易混淆。

在threeJS中矩阵的后乘方法为multiply():

var A = new THREE.Matrix4();
A.set(1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16);
var B = new THREE.Matrix4();
B.set(16, 15, 14, 13,
    12, 11, 10, 9,
    8, 7, 6, 5,
    4, 3, 2, 1);
A.multiply(B);
console.log(A);
console.log(B);

其运行结果为:

表明后乘方法multiply()的结果就是ABA∗B

反过来,使用前乘方法premultiply():

var A = new THREE.Matrix4();
A.set(1, 2, 3, 4,
    5, 6, 7, 8,
    9, 10, 11, 12,
    13, 14, 15, 16);
var B = new THREE.Matrix4();
B.set(16, 15, 14, 13,
    12, 11, 10, 9,
    8, 7, 6, 5,
    4, 3, 2, 1);
A.premultiply(B);
console.log(A);
console.log(B);

其运行结果为:

对比在线矩阵计算器中的计算结果:

表明前乘方法premultiply()的结果是BAB∗A

3. 参考

在线矩阵计算器

分类: three.js

标签: 矩阵 , three.js


相关文章
|
27天前
ThreeJs场景中添加视频
这篇文章详细说明了如何在Three.js场景中添加并播放视频,包括视频纹理的创建与应用,以及如何将视频流显示在3D模型的表面上。
16 2
ThreeJs场景中添加视频
|
6天前
|
JavaScript
jQuery实现的手风琴四季场景变换特效源码
jQuery实现的手风琴四季场景变换特效源码是一段基于jQuery实现的手风琴四季场景变换效果代码,拥有春夏秋冬四季转场特效,鼠标可放大每个季节的图像,欢迎对此段代码感兴趣的朋友前来下载使用。
11 1
|
26天前
Threejs使用CubeCamera实现环境映射
这篇文章详细介绍了如何在Three.js中使用CubeCamera来实现环境映射,包括创建CubeCamera、设置反射材质以及实时更新渲染结果的具体步骤。
38 3
|
6月前
|
JavaScript 开发工具 git
Three.js第1篇,Three.js新手教学,如何在项目中使用Three.js(three.js使用流程详细,three.js的使用方式,three.js创建3d物体)
Three.js封装了WebGL的底层细节,是一款运行在浏览器中的 3D 引擎,可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象,目前在Git上已经拥有90k+的star。
129 0
Three.js第1篇,Three.js新手教学,如何在项目中使用Three.js(three.js使用流程详细,three.js的使用方式,three.js创建3d物体)
|
6月前
|
JavaScript 前端开发
Three.js 的骨骼动画 SkinnedMesh
【2月更文挑战第16天】
182 2
|
JavaScript 前端开发 API
Three.js学习笔记 一
在react中快速实现三维模型的创建
Three.js学习笔记   一
Three.js绘制管
使用Three.js绘制中空的圆柱管道
205 0
|
移动开发 前端开发 JavaScript
|
JavaScript 数据库
three.js实现酷炫散点模型
three.js实现酷炫散点模型
three.js实现酷炫散点模型
|
传感器 移动开发 前端开发
纯CSS实现720全景?不用Three.js 也可以
纯CSS实现720全景?不用Three.js 也可以
1018 3
纯CSS实现720全景?不用Three.js 也可以