旋转我的 SceneKit material

Rotate my SceneKit material

我正在使用 AVCapturePhotoOutput 拍摄图像,然后使用它们的 JPEG 表示作为 SceneKit SCNPlane 上的纹理,它与图像具有相同的纵横比:

let image = UIImage(data: dataImage!)
let rectangle = SCNPlane(width:9, height:12)
let rectmaterial = SCNMaterial()
rectmaterial.diffuse.contents = image
rectmaterial.isDoubleSided = true
rectangle.materials = [rectmaterial]
let rectnode = SCNNode(geometry: rectangle)
let pos = sceneSpacePosition(inFrontOf: self.pictCamera, atDistance: 16.5)  // 16.5 is arbitrary, but makes the rectangle the same size as the camera
rectnode.position = pos
rectnode.orientation = self.pictCamera.orientation
pictView.scene?.rootNode.addChildNode(rectnode)

sceneSpacePosition 是一段 将 CoreMotion 映射到 SceneKit 方向的代码。它用于放置矩形,它确实以正确的大小出现在正确的位置。一切都很酷。

问题是图像相对于矩形旋转了 90 度。所以我做了显而易见的事情:

rectmaterial.diffuse.contentsTransform = SCNMatrix4MakeRotation(Float.pi / 2, 0, 0, 1)

这行不通属性;生成的图像无法识别。看起来图像的一小部分已被拉伸到一个巨大的尺寸。我以为它可能是轴,但我尝试了所有三个结果相同。

有什么想法吗?

您正在按照 Alain T 的建议在左上角旋转。 如果您向下移动图片,您可能会得到预期的旋转效果。

试试这个:

let translation = SCNMatrix4MakeTranslation(0, -1, 0)
let rotation = SCNMatrix4MakeRotation(Float.pi / 2, 0, 0, 1)
let transform = SCNMatrix4Mult(translation, rotation)
rectmaterial.diffuse.contentsTransform = transform