簡體   English   中英

使用SceneKit和CoreMotion凝視SCNNode

[英]Gaze at SCNNode using SceneKit and CoreMotion

我正在使用SceneKit和CoreMotion創建一個虛擬現實應用程序。 一切工作正常,但是現在我想編寫一個函數,通過計算對象在眼睛空間中的位置來檢查用戶是否正在查看對象。

我正在使用SCNSceneRendererDelegate在我的ViewController中委派渲染器功能

func renderer(aRenderer: SCNSceneRenderer, updateAtTime time: NSTimeInterval) {

    var motion = motionManager?.deviceMotion

    if (motion != nil) {
        let currentAttitude = motion!.attitude
        let roll = Float(currentAttitude.roll)
        let pitch = Float(currentAttitude.pitch)
        let yaw = Float(currentAttitude.yaw)

        cameraRollNode.eulerAngles = SCNVector3Make(roll, 0.0, 0.0)
        cameraPitchNode.eulerAngles = SCNVector3Make(0.0, 0.0, pitch)
        cameraYawNode.eulerAngles = SCNVector3Make(0.0, yaw, 0.0)        }
}

我在Android(支持官方Cardboard SDK)中編寫了以下代碼。

private boolean isLookingAtObject(WorldObject object) {
    float[] initVec = { 0, 0, 0, 1.0f };
    float[] objPositionVec = new float[4];

    // Convert object space to camera space. Use the headView from onNewFrame.
    Matrix.multiplyMM(mModelView, 0, this.getHeadViewMatrix(), 0, object.getModel().getModelMatrix().getFloatValues(), 0);
    Matrix.multiplyMV(objPositionVec, 0, mModelView, 0, initVec, 0);

    float pitch = (float) Math.atan2(objPositionVec[1], -objPositionVec[2]);
    float yaw = (float) Math.atan2(objPositionVec[0], -objPositionVec[2]);

    return Math.abs(pitch) < PITCH_LIMIT && Math.abs(yaw) < YAW_LIMIT;
}

有沒有一種方法可以使用CoreMotion和SceneKit在眼空間中計算對象

如果您要查找的只是對象是否在視野中,則無需自己做任何坐標轉換數學。 只是問一下視圖- 有一種解決方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM