相关疑难解决方法(0)

使用ARAnchor插入节点并直接插入节点有什么区别?

在ARKit中,我发现了两种在hitTest之后插入节点的方法

  1. 插入ARAnchor然后在渲染器中创建节点(_ renderer:SCNSceneRenderer,nodeFor anchor:ARAnchor) - > SCNNode?

    let anchor = ARAnchor(transform:hit.worldTransform)
    sceneView.session.add(anchor:anchor)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 直接插入节点

    node.position = SCNVector3(hit.worldTransform.columns.3.x, hit.worldTransform.columns.3.y, hit.worldTransform.columns.3.z)
    sceneView.scene.rootNode.addChildNode(node)
    
    Run Code Online (Sandbox Code Playgroud)

两者都看起来适合我,但为什么这样或那样?

augmented-reality swift arkit

32
推荐指数
1
解决办法
9661
查看次数

ARKit vs SceneKit坐标

我试图理解在ArKit中引入的不同元素与它们在SceneKit中的等价物之间的区别:

  • SCNNode.simdTransformVS SCNNode.transform.在ARKit中,似乎人们使用SCNNode.simdTransform而不是SCNNode.transform.他们有什么不同?simdTransform似乎使用列主要顺序,而transform(SCNMatrix4)是行主要.如何将一个转换为另一个?只需转置?我的印象是,如果我使用transform而不是跟踪,那么跟踪也不会有效simdTransform.这是预期的还是仅仅是一种印象?如果我设置了一个属性,如果我再设置另一个属性会怎样?

  • ARFrame.cameravs Scene.pointOfView:看看他们的转型,他们似乎有点不同:

.

// ARFrame.camera.transform (matrix_float4x4)
-0.01 0.99  -0.11 0.02
-0.99 0.00  0.11  0.06
0.10  0.11  0.98  0.0
0.0   0.0   0.0   1.0

// sceneView.pointOfView.transform (SCNMatrix4)
// or sceneView.pointOfView.simdTransform^T (matrix_float4x4)
0.99  0     0.11   0
0.01  0.99  -0.12  0
-0.11 0.11  0.98   0
0.03  0.6   0.0    0.99
Run Code Online (Sandbox Code Playgroud)

它们是相同的减一轮吗?

scenekit ios11 arkit

9
推荐指数
1
解决办法
1920
查看次数

ARKit - 将 CIFilter 应用于 ARFaceAnchor 的特定顶点

我正在尝试将 aCIFilter应用于ARFaceAnchor. 我能够使用以下方法访问顶点:

let vertices = faceAnchor.geometry.vertices 

let relevantVertices = [vertices[580], 
                        vertices[1019], 
                        vertices[1017], 
                        vertices[660]]
Run Code Online (Sandbox Code Playgroud)

但是我无法理解如何将它与节点一起使用(不确定这是否是解决方案),以便在面部移动时使这些顶点不断更新CIFilter

例如,我选择了一些顶点,并使用 Photoshop 对选定的顶点(硬编码)应用了黑白滤镜进行演示。想象一下没有线条:)

在此处输入图片说明

任何帮助将不胜感激!

augmented-reality ios scenekit swift arkit

7
推荐指数
0
解决办法
557
查看次数

SpriteKit,将进程放在另一个核心上?

想象一下你的

 class NattyScene: SKScene {
Run Code Online (Sandbox Code Playgroud)

您可能有节点的自定义字段,或每帧发生的其他内容.现在想象你有一些计算,一个很好的例子可能是重心......

var globalCOG: CGPoint
func updateCOG() {
   .. say, get all the .position of all Spaceship ..
   globalCOG = .. some point
}
Run Code Online (Sandbox Code Playgroud)

把它放在另一个线程上是很有意义的,假设像

  • 它是线程安全/快速读取.positions
  • 另一个核心的另一个假定的线程,知道SpriteKit帧(这样你可以用通常的方式计算直到放弃时间等,也许你可能更喜欢跳帧或其他 - 通常的线程游戏编程)
  • 你可以在线程安全/ blahblah将COG全局写回SpriteKit的其余部分

这是什么交易?

  • 在Swift4/SpriteKit中,现实的成语究竟是什么呢?
  • 你如何强迫它进入另一个整体物理核心?

有任何想法吗?


override func update(_ currentTime: TimeInterval) {

    let x = safely get info from a thread on another physical core on the device
    print("now that's cool")
}
Run Code Online (Sandbox Code Playgroud)

在另一个核心......

 func loopy() {

    let x = safely look at info on NattyScene
    let globalCOG …
Run Code Online (Sandbox Code Playgroud)

multithreading grand-central-dispatch ios sprite-kit swift

5
推荐指数
1
解决办法
158
查看次数