ios - 旋转我的 SceneKit Material

标签 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)

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

有什么想法吗?

最佳答案

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

关于ios - 旋转我的 SceneKit Material ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42705516/

相关文章:

ios - 在 iOS 应用程序中使用直播视频

ios - 只有 iOS 无法连接到 firebase

swift - 创建 SCNNode 的子类

ios - 动态 3DObject 在 ARKit-SceneKit 中的使用

swift - 当对象不再在相机框架中时,如何删除 ARReferenceObject Anchor?

ios - 缩放节点的问题(.simdPivot 与 simdScale 和 .scale 属性)

ios - GVRVideoViewer 显示粉红色屏幕,但仍然有声音

objective-c - 我需要在释放之前从 UIButton 中删除目标吗?

ios - Swift:从表中删除 TableView 行而不将其从存储它的数据库中删除

swift - ARKit – 在平面上投下 3D 物体的影子