在ARKit中,我发现了两种在hitTest之后插入节点的方法
插入ARAnchor然后在渲染器中创建节点(_ renderer:SCNSceneRenderer,nodeFor anchor:ARAnchor) - > SCNNode?
let anchor = ARAnchor(transform:hit.worldTransform)
sceneView.session.add(anchor:anchor)
Run Code Online (Sandbox Code Playgroud)直接插入节点
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)两者都看起来适合我,但为什么这样或那样?
我试图理解在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)
它们是相同的减一轮吗?
我正在尝试将 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 对选定的顶点(硬编码)应用了黑白滤镜进行演示。想象一下没有线条:)
任何帮助将不胜感激!
想象一下你的
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)
把它放在另一个线程上是很有意义的,假设像
这是什么交易?
有任何想法吗?
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)