gpt4 book ai didi

javascript - 如何在 three.js 中获取 Matrix3 的逆?

转载 作者:行者123 更新时间:2023-11-30 16:52:24 27 4
gpt4 key购买 nike

three.js 文档指出 Matrix3有一个 .getInverse 函数。

但它需要一个 Matrix4 作为它的第一个参数。

所以我在 r71 中以天真的方式尝试了它:

var m = new THREE.Matrix3();
console.log('Initial:', m.elements);
m.set(10,8,3,15,7,2,10,6,1);
console.log('Set :', m.elements);
console.log('Inverse:', m.getInverse(m).elements);

http://jsfiddle.net/as8g61nb/5/ (仅在 Chrome 中测试)

但这给了我:

Initial: [1, 0, 0, 0, 1, 0, 0, 0, 1]                   // OK
Set : [10, 15, 10, 8, 7, 6, 3, 2, 1] // Arbitrary numbers
Inverse: [NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN] // Not what I expected

Wolfram Alpha 返回有效的 3x3 矩阵。

输入:逆[{{10, 15, 10}, {8, 7, 6}, {3, 2, 1}}]

输出:{{-1/10, 1/10, 2/5}, {1/5, -2/5, 2/5}, {-1/10, 1/2, - 1}

我查看了 three.js 源代码以检查它在 .getInverse 中的作用,但这让我更加困惑。

如前所述,它需要一个 Matrix4 作为它的第一个参数,因此访问 elements[10]elements[11] 是行不通的在 Matrix3 上,因此可能导致 NaN 元素数组。

那么我是否应该从我的 Matrix3 创建一个 Matrix4 然后将其反转并将其转换回以获得我的逆 Matrix3 ?还是我在这里错过了一些明显的东西?

最佳答案

three.js 是基于 Matrix4 的,因此没有直接反转 Matrix3 的方法。

一种解决方案是在您的代码中到处使用 Matrix4

另一个解决方案是从您的 Matrix3 填充一个 Matrix4,然后调用 getInverse()

var m3 = new THREE.Matrix3();

m3.set( 10,8,3, 15,7,2, 10,6,1 ); // column1, column2, column3

console.log( 'Set :', m3.elements );

var m4 = new THREE.Matrix4();

m4.set( 10,8,3,0, 15,7,2,0, 10,6,1,0, 0,0,0,1 );

console.log( 'Inverse:', m3.getInverse(m4).elements );

three.js r.71

关于javascript - 如何在 three.js 中获取 Matrix3 的逆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30321149/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com