Press "Enter" to skip to content

AR 开发中那些好用的 simd 函数

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

类型与名称

 

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

发表评论

邮箱地址不会被公开。 必填项已用*标注