mirror of
https://github.com/hannobraun/Fornjot
synced 2025-05-12 13:58:28 +00:00
Implement matrix multiplication
This commit is contained in:
parent
a3502baff0
commit
cb85813d03
@ -1,4 +1,4 @@
|
|||||||
use std::sync::Arc;
|
use std::{ops::Mul, sync::Arc};
|
||||||
|
|
||||||
use anyhow::anyhow;
|
use anyhow::anyhow;
|
||||||
use wgpu::util::DeviceExt;
|
use wgpu::util::DeviceExt;
|
||||||
@ -238,3 +238,43 @@ impl Mat4x4 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Mul<Self> for Mat4x4 {
|
||||||
|
type Output = Self;
|
||||||
|
|
||||||
|
fn mul(self, rhs: Self) -> Self::Output {
|
||||||
|
let [[l00, l01, l02, l03], [l10, l11, l12, l13], [l20, l21, l22, l23], [l30, l31, l32, l33]] =
|
||||||
|
self.columns;
|
||||||
|
let [[r00, r01, r02, r03], [r10, r11, r12, r13], [r20, r21, r22, r23], [r30, r31, r32, r33]] =
|
||||||
|
rhs.columns;
|
||||||
|
|
||||||
|
let m00 = l00 * r00 + l10 * r01 + l20 * r02 + l30 * r03;
|
||||||
|
let m01 = l01 * r00 + l11 * r01 + l21 * r02 + l31 * r03;
|
||||||
|
let m02 = l02 * r00 + l12 * r01 + l22 * r02 + l32 * r03;
|
||||||
|
let m03 = l03 * r00 + l13 * r01 + l23 * r02 + l33 * r03;
|
||||||
|
|
||||||
|
let m10 = l00 * r10 + l10 * r11 + l20 * r12 + l30 * r13;
|
||||||
|
let m11 = l01 * r10 + l11 * r11 + l21 * r12 + l31 * r13;
|
||||||
|
let m12 = l02 * r10 + l12 * r11 + l22 * r12 + l32 * r13;
|
||||||
|
let m13 = l03 * r10 + l13 * r11 + l23 * r12 + l33 * r13;
|
||||||
|
|
||||||
|
let m20 = l00 * r20 + l10 * r21 + l20 * r22 + l30 * r23;
|
||||||
|
let m21 = l01 * r20 + l11 * r21 + l21 * r22 + l31 * r23;
|
||||||
|
let m22 = l02 * r20 + l12 * r21 + l22 * r22 + l32 * r23;
|
||||||
|
let m23 = l03 * r20 + l13 * r21 + l23 * r22 + l33 * r23;
|
||||||
|
|
||||||
|
let m30 = l00 * r30 + l10 * r31 + l20 * r32 + l30 * r33;
|
||||||
|
let m31 = l01 * r30 + l11 * r31 + l21 * r32 + l31 * r33;
|
||||||
|
let m32 = l02 * r30 + l12 * r31 + l22 * r32 + l32 * r33;
|
||||||
|
let m33 = l03 * r30 + l13 * r31 + l23 * r32 + l33 * r33;
|
||||||
|
|
||||||
|
Self {
|
||||||
|
columns: [
|
||||||
|
[m00, m01, m02, m03],
|
||||||
|
[m10, m11, m12, m13],
|
||||||
|
[m20, m21, m22, m23],
|
||||||
|
[m30, m31, m32, m33],
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user