如何从objective-c中的simd_float4获取值

Posted

技术标签:

【中文标题】如何从objective-c中的simd_float4获取值【英文标题】:How to get values from simd_float4 in objective-c 【发布时间】:2018-12-04 00:16:37 【问题描述】:

我从 ARKit 获得了一个 simd_float4*4 矩阵。我想检查矩阵的值,但发现自己不知道如何在 Objective-C 中做到这一点。在 Swift 中,这可以写成 matrix.columns.3 来获取一个值向量。但我不知道如何在 Objective-C 中做到这一点。有人可以指点我一个方向吗?谢谢!

【问题讨论】:

使用来自苹果开发者的矩阵,developer.apple.com/documentation/accelerate/simd/… 【参考方案1】:

simd_float4x4 是一个结构体(类似 4 simd_float4),你可以使用

simd_float4x4.columns[index]

访问矩阵中的列。

/*! @abstract A matrix with 4 rows and 4 columns.*/
struct simd_float4x4 
    public var columns: (simd_float4, simd_float4, simd_float4, simd_float4)
    public init()
    public init(columns: (simd_float4, simd_float4, simd_float4, simd_float4))

苹果文档链接:https://developer.apple.com/documentation/simd/simd_float4x4?language=objc

希望有帮助!

【讨论】:

【参考方案2】:

这是一个例子——来自这个项目,是 Obj-C ARKit 冒险的一个很好的参考——https://github.com/markdaws/arkit-by-example/blob/part3/arkit-by-example/ViewController.m

- (void)insertGeometry:(ARHitTestResult *)hitResult 
  // Right now we just insert a simple cube, later we will improve these to be more
  // interesting and have better texture and shading

  float dimension = 0.1;
  SCNBox *cube = [SCNBox boxWithWidth:dimension height:dimension length:dimension chamferRadius:0];
  SCNNode *node = [SCNNode nodeWithGeometry:cube];

  // The physicsBody tells SceneKit this geometry should be manipulated by the physics engine
  node.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeDynamic shape:nil];
  node.physicsBody.mass = 2.0;
  node.physicsBody.categoryBitMask = CollisionCategoryCube;

  // We insert the geometry slightly above the point the user tapped, so that it drops onto the plane
  // using the physics engine
  float insertionYOffset = 0.5;
  node.position = SCNVector3Make(
                                 hitResult.worldTransform.columns[3].x,
                                 hitResult.worldTransform.columns[3].y + insertionYOffset,
                                 hitResult.worldTransform.columns[3].z
                                 );
  [self.sceneView.scene.rootNode addChildNode:node];
  [self.boxes addObject:node];

【讨论】:

以上是关于如何从objective-c中的simd_float4获取值的主要内容,如果未能解决你的问题,请参考以下文章

如何从Objective-C中的异步内部函数内部返回外部函数

如何从Objective-C中的异步内部函数内部返回外部函数

Objective-C/iOS:如何从 CoreData 中的属性中删除“值”?

如何从objective-c中的simd_float4获取值

如何从objective-c类推送一个快速视图控制器并将数据传回并继续objective-c类中的下一个过程

如何从objective-c中的代码调用点击手势IBAction