如何将变换矩阵应用于SceneKit中的向量

Tom*_*Tom 5 scenekit

我在这里错过了什么吗?在各类矢量/矩阵功能,在这里,我看不到任何功能,只需申请一个SCNMatrix4变换到SCNVector4.我当然可以通过写出矩阵/向量乘法来做到这一点,但肯定不需要吗?

原因是我正在分两步更新相机的投影变换.首先,我需要将一个变换应用于原始变换,然后我需要将此变换应用于向量以计算出一个数字,然后根据该数字我需要在顶部应用进一步的变换.

由于看起来调用setProjectionTransform没有立竿见影的效果(我假设它在当前事务提交时发生),我无法调用projectPoint将转换应用于其中间状态.因此,我一直在寻找构建转换矩阵并手动应用它.

当然必须有一个函数在这里做一个你可能想要用矩阵和向量做的最基本的东西???

Jes*_*ssy 5

在我看来,Apple还没有时间将他们的Game Kit类型转换为simd,但因为他们知道他们会这样做,所以他们没有提供你对Scene Kit的期望.现在,我认为正确的做法是让我们在初始化器的存储库上工作.所有工作都将使用simd类型完成; 必要时会进行转换.

extension float4x4 {
    init(_ matrix: SCNMatrix4) {
        self.init([
            float4(matrix.m11, matrix.m12, matrix.m13, matrix.m14),
            float4(matrix.m21, matrix.m22, matrix.m23, matrix.m24),
            float4(matrix.m31, matrix.m32, matrix.m33, matrix.m34),
            float4(matrix.m41, matrix.m42, matrix.m43, matrix.m44)
        ])
    }
}

extension float4 {
    init(_ vector: SCNVector4) {
        self.init(vector.x, vector.y, vector.z, vector.w)
    }
}

extension SCNVector4 {
    init(_ vector: float4) {
        self.init(x: vector.x, y: vector.y, z: vector.z, w: vector.w)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 道歉,我没有尝试过,因为我找到了一种不同的方法来解决我完全避免矩阵乘法的问题.但是,我已经接受了这个答案,因为我看不出任何原因它不起作用,而且看起来确实方便快捷. (2认同)