Last active
September 11, 2020 07:58
-
-
Save Bersaelor/aeb36f4f524dbec6540fb48918e987ec to your computer and use it in GitHub Desktop.
Applying SCNMatrix4 to SCNVector3 (Couldn't find this in SceneKit)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Matrix4+Extensions.swift | |
// StARs | |
// | |
// Created by Konrad Feiler on 17.12.17. | |
// Copyright © 2017 Konrad Feiler. All rights reserved. | |
// | |
import Foundation | |
import SceneKit | |
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) | |
} | |
init(_ vector: SCNVector3) { | |
self.init(vector.x, vector.y, vector.z, 1) | |
} | |
} | |
extension SCNVector4 { | |
init(_ vector: float4) { | |
self.init(x: vector.x, y: vector.y, z: vector.z, w: vector.w) | |
} | |
init(_ vector: SCNVector3) { | |
self.init(x: vector.x, y: vector.y, z: vector.z, w: 1) | |
} | |
} | |
extension SCNVector3 { | |
init(_ vector: float4) { | |
self.init(x: vector.x / vector.w, y: vector.y / vector.w, z: vector.z / vector.w) | |
} | |
} | |
func * (left: SCNMatrix4, right: SCNVector3) -> SCNVector3 { | |
let matrix = float4x4(left) | |
let vector = float4(right) | |
let result = matrix * vector | |
return SCNVector3(result) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment