Встряхивание камеры при использовании Oculus Rift

Я пишу приложение с помощью 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();

1

Решение

WDM (Windows Desktop Manager) был причиной проблемы. Итак, я отключил Aero, выбрав Windows Basic Theme, но это не решило мою проблему. Итак, я должен позвонить DwmEnableComposition(DWM_EC_DISABLECOMPOSITION) чтобы отключить композицию DWM, а затем не происходит дрожание.

1

Другие решения


По вопросам рекламы [email protected]