我有移动的物体,我希望能够与玩家碰撞.我有能力通过获取我当前的位置/方向来启动我的物体,但我不明白如何将物体附加到我身上,这将随时跟随我的位置.
我需要找到一个摄像头正在注视哪个方向,例如,如果它的望着Z+,Z-,X+,或X-.
我已经尝试过使用了eulerAngles,但偏航的范围是0- > 90- > 0- > -90- > 0这意味着我只能检测相机是否正在朝向,Z或者X不是在向这些轴的正方向或负方向看.
我正在拍摄图像,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)
Run Code Online (Sandbox Code Playgroud)
sceneSpacePosition是一些可以在SO上找到的代码,它将CoreMotion映射到SceneKit方向.它用于放置矩形,确实出现在正确的位置,大小合适.一切都很酷.
问题是图像旋转90度到矩形.所以我明白了:
rectmaterial.diffuse.contentsTransform = SCNMatrix4MakeRotation(Float.pi / 2, 0, 0, 1)
Run Code Online (Sandbox Code Playgroud)
这不起作用; 生成的图像无法识别.看起来图像的一小部分已被拉伸到一个巨大的尺寸.我认为它可能是轴,但我尝试了所有三个相同的结果.
有任何想法吗?