旋转我的SceneKit材质

时间:2017-03-09 21:13:52

标签: ios scenekit

我正在使用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)

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

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

你正按照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