Сцена Vuforia iOS Swift не видна - PullRequest
0 голосов
/ 03 сентября 2018

Я скачал пример кода с https://github.com/yshrkt/VuforiaSampleSwift для реализации Vuforia с swift. Это не сработало с последним SDK, но я успешно загрузил xml/dat dataSet, и когда я указываю на целевой метод, вызывается ViewController.createStonesScene(with view: VuforiaEAGLView) -> SCNScene. К сожалению, я не вижу ничего на предпросмотре камеры. Должен быть plane с цветом фона, но ничего не добавлено. Может кто-нибудь помочь мне решить это? Я не хочу показывать простой самолет для начала. Мой проект по адресу: https://www.dropbox.com/s/fk71oay1sopc1vp/test.zip?dl=1 Пожалуйста, обновите Vuforia License key в AppDelegate, я не могу предоставить его, так как я не являюсь владельцем этого приложения.

Дошло до того, что я знаю, что эта сцена отображается, но преобразования камеры должны быть неверными. Либо _cameraNode.camera.projectionTransform, либо _cameraNode.transform (или оба).

Я добавил zNear = 0.01 в cameraNode, что было небольшим шагом. Теперь, если я просто применю cameraNode.transform и отключу cameraNode.camera.projectionTransform, я вижу узел правильного размера, но он повернут на 90 градусов, а также, когда я перемещаю камеру, она перемещается на 90 градусов неправильно (перемещение вверх / вниз перемещает его влево / вправо) , Немного кода, который делает это ниже:

- (void)setNeedsChangeSceneWithUserInfo: (NSDictionary*)userInfo {
    SCNScene* scene = [self.sceneSource sceneForEAGLView:self userInfo:userInfo];
    if (scene == nil) {
        return;
    }

    SCNCamera* camera = [SCNCamera camera];
    _cameraNode = [SCNNode node];
    _cameraNode.camera = camera;
    _cameraNode.camera.zNear = 0.01;
//    _cameraNode.camera.projectionTransform = _projectionTransform;
    [scene.rootNode addChildNode:_cameraNode];

    _renderer.scene = scene;
    _renderer.pointOfView = _cameraNode;
}

    // Set camera node matrix
- (void)setCameraMatrix:(Vuforia::Matrix44F)matrix {
    SCNMatrix4 extrinsic = [self SCNMatrix4FromVuforiaMatrix44:matrix];
    SCNMatrix4 inverted = SCNMatrix4Invert(extrinsic);
    _cameraNode.transform = inverted;
}

- (void)setProjectionMatrix:(Vuforia::Matrix44F)matrix {
    _projectionTransform = [self SCNMatrix4FromVuforiaMatrix44:matrix];
//    _cameraNode.camera.projectionTransform = _projectionTransform;
}

Так что теперь мне нужно повернуть всю сцену на 90 градусов. Я думаю, что это могло быть в _cameraNode.camera.projectionTransform = _projectionTransform;, но когда я включаю это, я больше ничего не вижу. Как применить поворот на 90 "к этой сцене?

Вот видео о том, что я имею в виду: https://www.dropbox.com/s/z6pwaztlfyad8fx/ScreenRecording_09-03-2018%2015-01-17.MP4?dl=0

Я думаю, что это может быть в VuforiaManager.mm:

// Cache the projection matrix
const Vuforia::CameraCalibration& cameraCalibration = Vuforia::CameraDevice::getInstance().getCameraCalibration();
_projectionMatrix = Vuforia::Tool::getProjectionGL(cameraCalibration, 0.05f, 5000.0f);

[_eaglView setProjectionMatrix:_projectionMatrix];

Кто-нибудь знает, как это исправить?

...