simd_float4x4 列

Posted

技术标签:

【中文标题】simd_float4x4 列【英文标题】:simd_float4x4 Columns 【发布时间】:2017-11-20 13:25:48 【问题描述】:

我想平移一个平面而不旋转图像。出于某种原因,我的图像正在旋转。

var translation = matrix_identity_float4x4
translation.colum = -0.2
let transform = simd_mul(currentFrame.camera.transform, translation)
planeNode.simdWorldTransform = matrix_multiply(currentFrame.camera.transform, translation)

另外,我注意到matrix_identity_float4x4 包含 4 列,但文档不可用。

为什么是 4 列?有飞机的frame吗?

【问题讨论】:

【参考方案1】:

最简单的方法是使用以下代码进行定位:

let planeNode = SCNNode()
planeNode.geometry = SCNPlane(width: 20, height: 20)
// At first we need to rotate a plane about its x axis in radians:
planeNode.rotation = SCNVector4(1, 0, 0, -Double.pi/2)  
planeNode.geometry?.materials.first?.diffuse.contents = UIColor.red

planeNode.position.x = 10
planeNode.position.z = 10

// planeNode.position = SCNVector3(x: 10, y: 0, z: 10)

scene.rootNode.addChildNode(planeNode)

或者这样:

let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(x: 0, y: 0, z: 15)
scene.rootNode.addChildNode(cameraNode)

let planeNode = SCNNode()
planeNode.geometry = SCNPlane(width: 20, height: 20)
planeNode.rotation = SCNVector4(1, 0, 0, -Double.pi/2)
planeNode.geometry?.materials.first?.diffuse.contents = UIColor.red

let distance: Float = 50
planeNode.simdPosition = cameraNode.simdWorldFront * distance  // -Z axis
planeNode.simdPosition = cameraNode.simdWorldRight * distance  // +X axis

scene.rootNode.addChildNode(planeNode)

如果您想了解更多关于 ARKit 和 SceneKit 框架中使用的矩阵的信息,请查看Figure 1-8常见转换的矩阵配置

希望这会有所帮助。

【讨论】:

以上是关于simd_float4x4 列的主要内容,如果未能解决你的问题,请参考以下文章

SCNMatrix4 vs simd - 列专业还是行专业?

了解 ARKit 世界变换矩阵

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

返回SIMD 4x4向量-是什么意思?

OpenCL 内联函数可以返回 OpenCL 类型吗?

4x4矩阵键盘