私はVuforiaでレンダリングされたSCNScene
のカメラ位置を計算します。しかし、オブジェクトはマーカーに固定されているのではなく、動くときに飛び回っています。シーン内の立方体は正書法でしか表示されませんが、デバイスをどのように左右に動かしても見えません。Vuforia GLマトリックスからカメラ位置を計算するには?
カメラの位置はすべてのフレームで計算されます。カメラを見つめているとき
// Get model view matrix
Vuforia::Matrix44F modelViewMatrix = Vuforia::Tool::convertPose2GLMatrix(result->getPose());
// Convert to extrinsic matrix
SCNMatrix4 extrinsic = [self SCNMatrix4FromVuforiaMatrix44: modelViewMatrix];
SCNMatrix4 inverted = SCNMatrix4Invert(extrinsic);
// Set new position of SCNCamera
cameraNode.transform = inverted;
カメラ射影行列が計算されます。私はここで間違って
// Get device camera calibration
const Vuforia::CameraCalibration& cameraCalibration = Vuforia::CameraDevice::getInstance().getCameraCalibration();
projectionGLMatrix = Vuforia::Tool::getProjectionGL(cameraCalibration, 2.0f, 5000.0f);
// Convert matrix
GLKMatrix4 glkMatrix;
for(int i=0; i<16; i++) {
glkMatrix.m[i] = projectionGLMatrix.data[i];
}
// Convert matrix
SCNMatrix4 projectionTransform = SCNMatrix4FromGLKMatrix4(glkMatrix);
cameraNode.camera.projectionTransform = projectionTransform;
何をしているのですか?
更新1
射影行列は、現在のカメラの起動時に、次のように計算される:
const Vuforia::CameraCalibration& cameraCalibration = Vuforia::CameraDevice::getInstance().getCameraCalibration();
Vuforia::Matrix44F vuforiaMatrix = Vuforia::Tool::getProjectionGL(cameraCalibration, 2.0f, 5000.0f);
matrix_float4x4 simdMatrix = simdMatrixWithVuforiaMatrix44F(vuforiaMatrix);
cameraNode.camera.projectionTransform = SCNMatrix4FromMat4(simdMatrix);
カメラ位置がフレーム毎に更新され:移動させることにより
Vuforia::Matrix44F modelViewMatrix = Vuforia::Tool::convertPose2GLMatrix(result->getPose());
matrix_float4x4 simdMatrix = simdMatrixWithVuforiaMatrix44F(modelViewMatrix);
cameraNode.transform = SCNMatrix4FromMat4(simdMatrix);
NSLog(@"camera position: x%lf, y%lf, z%lf, rotation: x%lf, y%lf, z%lf", _cameraNode.position.x, _cameraNode.position.y, _cameraNode.position.z, _cameraNode.rotation.x, _cameraNode.rotation.y, _cameraNode.rotation.z);
カメラの位置(左グラフ)と回転(右グラフ)の記録を観察すると、軸は次のようになります:
回転軸は位置軸とは異なります。また、残りの軸(以下のグラフではタイトルなし)を中心とした回転は、0.999付近に浮かぶcameraNode.rotation.x値に影響しません。
ここで何が間違っていますか?
ありがとうございます。カメラのx、y、zの位置は、あなたの方法と同じです。しかし、私は同じ問題を抱えている、私はデバイスを移動するときにオブジェクトがパーカーにとどまっていない。デバイスを右(+ x)に動かすと、レンダリングされたオブジェクトは画面上の左に移動しません。ここでは、それをより良く説明するビデオがあります:https://dl.dropboxusercontent.com/u/71604584/vuforia_1.m4v – Manuel
私は 'renderFrameVuforia'でカメラの投影行列を更新するだけで、他のノードは変換しないシーンのそれが理由だろうか? Btw。私はSCNRendererを使用しています。 – Manuel
投影行列は開始時に一度更新されます。その後、リフレッシュ/コールバックごとにオブジェクトを表すノードのポーズを更新する必要があります。 –