相关疑难解决方法(0)

如何使用SceneKit在场景中找到鼠标点?

我在SceneKit中设置了一个场景,并发出了一个命中测试来选择一个项目.但是,我希望能够在场景中沿着平面移动该项目.我继续接收鼠标拖动事件,但不知道如何将这些2D坐标转换为场景中的3D坐标.

我的情况很简单.摄像机位于0,0,50并指向0,0,0.我只想沿z平面拖动我的对象,其z值为0.

命中测试就像魅力一样,但是如何将拖动事件中的鼠标点转换为我拖动的3D对象的场景中的新位置?

opengl 3d mouse-picking scenekit

13
推荐指数
1
解决办法
6681
查看次数

使用touch在SceneKit中移动节点

我试图通过触摸移动SceneKit中的节点。我在这里使用代码:使用touch在SceneKit中移动特定节点

我遇到的问题是,每次启动panGesture时,我触摸的对象都会转到场景的左上角以开始移动。从该位置移动并松开是可以的,只是在每次平移开始时,对象都会从左角重置的问题。如果我缩小,它将在此新缩放级别的角上重置自己。

我的代码是:

func CGPointToSCNVector3(view: SCNView, depth: Float, point: CGPoint) -> SCNVector3 {
    let projectedOrigin = view.projectPoint(SCNVector3Make(0, 0, depth))
    let locationWithz   = SCNVector3Make(Float(point.x), Float(point.y), projectedOrigin.z)
    return view.unprojectPoint(locationWithz)
}
func dragObject(sender: UIPanGestureRecognizer){
    if(movingNow){
        let translation = sender.translationInView(sender.view!)
        var result : SCNVector3 = CGPointToSCNVector3(objectView, depth: tappedObjectNode.position.z, point: translation)
        tappedObjectNode.position = result
    }
    else{
        let hitResults = objectView.hitTest(sender.locationInView(objectView), options: nil)
        if hitResults.count > 0 {
            movingNow = true
        }
    }
    if(sender.state == UIGestureRecognizerState.Ended) {
    }
}
Run Code Online (Sandbox Code Playgroud)

override func viewDidLoad() {
    super.viewDidLoad() …
Run Code Online (Sandbox Code Playgroud)

ios scenekit swift

5
推荐指数
1
解决办法
3640
查看次数

标签 统计

scenekit ×2

3d ×1

ios ×1

mouse-picking ×1

opengl ×1

swift ×1