1

oculus でアプリケーションを作成していますが、カメラのセットアップに問題があります。時々、すべてが正常に機能しています。カメラが揺れ始め、見ているモデルが揺れているように見えます。誰もが今まで同じ問題を抱えていますか?

カメラ マトリックスを更新するコードは次のとおりです。

// Concatentaion of both the given navigator and the position tracking
OSG::Matrix4f m;

// If a navigator is given, we attach to it
if (navigator) {
    m = navigator->getMatrix();
}

// apply position/rotation as obtained from tracking
OSG::Matrix4f trans;

trans.setTranslate(ovr2osg(headPose.Position));
trans.setRotate(ovr2osg(headPose.Orientation));
m.mult(trans);

// compute modelview matrix for player
OSG::Matrix4f modelview;
player->setMatrix(m);
playerNode->getToWorld(modelview);
modelview.invert();

for (int i = 0; i < ovrEye_Count; ++i) {

    // The player node acts as the beacon for our stereo setup.
    // Basd on the modelview matrix of the player, we
    // now compute the viewing matrix for each eye, which
    // basically corresponds a small shift to account for eye separation.
    OSG::Matrix4f view(modelview);

    // The overall shift is determined by the IPD (Interpupillary
    // distance): To account for the IPD we just translate the viewing
    // matrix by the viewing adjust vector as reported by the oculus SDK.
    // NOTE: The Left-handed (!) multiplication is crucial
    const OSG::Matrix4f &adjust = ovr2osg( OVR::Matrix4f::Translation(eyeRenderDesc[i].ViewAdjust) );
    view.multLeft(adjust);

    // We use the projection matrices as supplied by the oculus SDK.
    const OSG::Matrix4f &proj = ovr2osg(projection[i]);

    // Finally, set the computed viewing/projection matrices
    camera[i]->setModelviewMatrix(view);
    camera[i]->setProjectionMatrix(proj);
}

OSG::Thread::getCurrentChangeList()->commitChanges();       
4

1 に答える 1

1

WDM (Windows デスクトップ マネージャー) が問題の原因でした。そのため、Windows Basic Theme を選択して Aero を無効にしましたが、問題は解決しません。そのため、DWM コンポジションを無効にするために を呼び出す必要がDwmEnableComposition(DWM_EC_DISABLECOMPOSITION)あり、ジャダーは発生しません。

于 2015-02-02T13:59:09.037 に答える