我得到了这些功能,缩放和移动屏幕上显示的3D对象时,点击它。问题在于,如果我移动或缩放节点(3D对象),它只会使节点的一部分更大或更小,我想缩放一切。
我知道一个解决方案是将Blender中的3D对象作为一个对象加入,但稍后,我想将特定的动画添加到特定的节点,这就是为什么我不想加入它们。
下面是我用于缩放和移动对象的代码:
@objc func panned(recognizer :UIPanGestureRecognizer)
{
//This function is for scaling
if recognizer.state == .changed
{
guard let sceneView = recognizer.view as? ARSCNView
else
{
return
}
let touch = recognizer.location(in: sceneView)
let translation = recognizer.translation(in: sceneView)
let hitTestResults = self.sceneView.hitTest(touch, options: nil)
if let hitTest = hitTestResults.first
{
let planeNode = hitTest.node
self.newAngleY = Float(translation.x) * (Float) (Double.pi)/180
self.newAngleY += self.currentAngleY
planeNode.eulerAngles.y = self.newAngleY
}
else if recognizer.state == .ended
{
self.currentAngleY = self.newAngleY
}
}
}
字符串
还有这个
@objc func pinched(recognizer :UIPinchGestureRecognizer)
{
if recognizer.state == .changed
{
guard let sceneView = recognizer.view as? ARSCNView
else
{
return
}
}
let touch = recognizer.location(in: sceneView)
let hitTestResults = self.sceneView.hitTest(touch, options: nil)
if let hitTest = hitTestResults.first
{
let planeNode = hitTest.node
let pinchScaleX = Float(recognizer.scale) * planeNode.scale.x
let pinchScaleY = Float(recognizer.scale) * planeNode.scale.y
let pinchScaleZ = Float(recognizer.scale) * planeNode.scale.z
planeNode.scale = SCNVector3(pinchScaleX, pinchScaleY, pinchScaleZ)
recognizer.scale = 1
}
}
型
我不知道这是否有帮助,但这里有一个节点的图像:Image of the nodes
提前感谢!
1条答案
按热度按时间frebpwbc1#
为了实现“分组”你正在寻找你必须创建一个空的场景节点,将根到所有其他节点。
字符串
接下来,将场景中的所有新节点附加到
myRootNode
,以便所有模型都成为同一节点的父节点。型
然后你可以对
myRootNode
应用平移,使它与所有子节点一起沿着移动。此外,子节点仍然是独立的模型,可以单独移动(平移/旋转),也可以作为一个组移动。在点击测试中,您应该缩放和旋转
myRootNode
,而不是单个模型。