2015-01-30 1 views
1

Я пишу приложение с oculus, и у меня проблема с настройкой камеры. Все работает нормально, иногда камера начинает дрожать, и модель, которую мы смотрим, кажется дрожащей. У кого-то такая же проблема до сих пор?Камера встряхивания при использовании Oculus Rift

Код для обновления матрицы камеры выглядит следующим образом:

// 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

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

Смежные вопросы