我正在使用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
是一段代码,可以在 SO 上找到,将 CoreMotion 映射到 SceneKit 方向。它用于放置矩形,在正确的位置和大小下确实出现了。非常酷。
问题是图像相对于矩形旋转了90度。所以我做了显而易见的:
rectmaterial.diffuse.contentsTransform = SCNMatrix4MakeRotation(Float.pi / 2, 0, 0, 1)
这个不正常,生成的图片无法识别。似乎是图像的一小部分被拉伸到了巨大的尺寸。我以为可能是轴的问题,但我尝试了所有三个轴,结果都一样。
有任何想法吗?