本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.
类型与名称
OC
oc 中的 simd 向量类型 疑似 是直接借用了 c++ 中的 vector
类型,所以有了很多别名:
typedef __attribute__((__ext_vector_type__(2))) char simd_char2; typedef ::simd_char2 char2; typedef simd_char2 vector_char2;
矩阵也是有了很多别名:
typedef struct { simd_float2 columns[2]; } simd_float2x2; typedef simd_float2x2 matrix_float2x2; struct float2x2 : ::simd_float2x2;
Swift
Swift 中则是依靠 Math
框架下的 Vector
类型(如 SIMD3)
public struct SIMD2<Scalar> : SIMD where Scalar : SIMDScalar public typealias simd_char2 = SIMD2<Int8> public struct simd_float2x2 public typealias float2x2 = simd_float2x2 public typealias matrix_float2x2 = simd_float2x2
由于别名很多,也导致构建函数名有很多,同时也导致很多其他函数名有很多。
这里不做过多列举,只是说明一下,以免产生误会。一般在使用中,个人推荐优先使用 simd 开头的类型和函数。
常用方法
四元数构建方法
为什幺要单独说四元数的构建?因为向量类型初始化太简单了,也只能从几个数来初始化;而矩阵类型的初始化方法往往又太难用了,很少有用 16 个数来初始化 4×4 矩阵的,一般处理旋转需要借助四元数。
public init(ix: Float, iy: Float, iz: Float, r: Float) public init(real: Float, imag: SIMD3<Float>) public init(angle: Float, axis: SIMD3<Float>) public init(from: SIMD3<Float>, to: SIMD3<Float>) public init(_ rotationMatrix: simd_float3x3) public init(_ rotationMatrix: simd_float4x4)
向量常用函数
public func simd_normalize(_ __x: simd_float2) -> simd_float2 public func simd_dot(_ __x: simd_float2, _ __y: simd_float2) -> Float public func simd_cross(_ __x: simd_float2, _ __y: simd_float2) -> simd_float3 public func simd_length(_ __x: simd_float2) -> Float public func simd_length_squared(_ __x: simd_float2) -> Float public func simd_distance(_ __x: simd_float2, _ __y: simd_float2) -> Float public func simd_distance_squared(_ __x: simd_float2, _ __y: simd_float2) -> Float
矩阵常用函数
public func matrix_scale(_ __a: Float, _ __x: simd_float2x2) -> simd_float2x2 public func simd_mul(_ __a: Float, _ __x: simd_float2x2) -> simd_float2x2 public func simd_mul(_ __x: simd_float2x2, _ __y: simd_float2) -> simd_float2 public func matrix_multiply(_ __x: simd_float2x2, _ __y: simd_float2) -> simd_float2 public func simd_mul(_ __x: simd_float2x2, _ __y: simd_float2x2) -> simd_float2x2 public func matrix_multiply(_ __x: simd_float2x2, _ __y: simd_float2x2) -> simd_float2x2 public func simd_linear_combination(_ __a: Float, _ __x: simd_float2x2, _ __b: Float, _ __y: simd_float2x2) -> simd_float2x2 public func simd_add(_ __x: simd_float2x2, _ __y: simd_float2x2) -> simd_float2x2 public func simd_sub(_ __x: simd_float2x2, _ __y: simd_float2x2) -> simd_float2x2 public func simd_transpose(_ __x: simd_float2x2) -> simd_float2x2 public func simd_inverse(_ __x: simd_float2x2) -> simd_float2x2 public func simd_equal(_ __x: simd_float2x2, _ __y: simd_float2x2) -> simd_bool public func simd_almost_equal_elements(_ __x: simd_float2x2, _ __y: simd_float2x2, _ __tol: Float) -> simd_bool public func simd_almost_equal_elements_relative(_ __x: simd_float2x2, _ __y: simd_float2x2, _ __tol: Float) -> simd_bool
四元数常用函数
public func simd_add(_ p: simd_quatf, _ q: simd_quatf) -> simd_quatf public func simd_sub(_ p: simd_quatf, _ q: simd_quatf) -> simd_quatf public func simd_mul(_ p: simd_quatf, _ q: simd_quatf) -> simd_quatf public func simd_mul(_ q: simd_quatf, _ a: Float) -> simd_quatf public func simd_mul(_ a: Float, _ q: simd_quatf) -> simd_quatf public func simd_conjugate(_ q: simd_quatf) -> simd_quatf public func simd_inverse(_ q: simd_quatf) -> simd_quatf public func simd_negate(_ q: simd_quatf) -> simd_quatf public func simd_dot(_ p: simd_quatf, _ q: simd_quatf) -> Float public func simd_length(_ q: simd_quatf) -> Float public func simd_normalize(_ q: simd_quatf) -> simd_quatf public func simd_slerp(_ q0: simd_quatf, _ q1: simd_quatf, _ t: Float) -> simd_quatf public func simd_slerp_longest(_ q0: simd_quatf, _ q1: simd_quatf, _ t: Float) -> simd_quatf public func simd_spline(_ q0: simd_quatf, _ q1: simd_quatf, _ q2: simd_quatf, _ q3: simd_quatf, _ t: Float) -> simd_quatf public func simd_bezier(_ q0: simd_quatf, _ q1: simd_quatf, _ q2: simd_quatf, _ q3: simd_quatf, _ t: Float) -> simd_quatf
Be First to Comment