我从https://github.com/yshrkt/VuforiaSampleSwift下载了示例代码,以通过Vuforia
实现swift
。它不适用于最新的SDK,但是我已经成功加载了xml/dat
数据集,并且当我指向目标方法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
(或两者)。
我向cameraNode添加了zNear = 0.01,这只是一步。现在,如果我仅应用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];
有人知道如何解决这个问题吗?