【发布时间】:2017-07-31 00:55:39
【问题描述】:
我正在使用 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 是 can be found here on SO 将 CoreMotion 映射到 SceneKit 方向的一段代码。它用于放置矩形,它确实以正确的大小出现在正确的位置。都很酷。
问题是图像旋转 90 度到矩形。所以我做了显而易见的事情:
rectmaterial.diffuse.contentsTransform = SCNMatrix4MakeRotation(Float.pi / 2, 0, 0, 1)
这不起作用属性;生成的图像无法识别。似乎图像的一小部分已被拉伸到很大的尺寸。我认为这可能是轴,但我尝试了所有三个结果相同。
有什么想法吗?
【问题讨论】:
-
我不熟悉 SceneKit 但可能是图像(纹理)不是在其中心而是在其一个角上旋转,除非您的图像是一个完美的正方形,否则它可能是旋转后使用拉伸/平铺渲染,这可能会产生奇怪的结果?