void CAMERA::Update() { position = position + pos_vel; /*if (strcmp(cam_mode.c_str(), "chase") == 0) Chase(entities.entity_array[chase_ent]); else if (strcmp(cam_mode.c_str(), "cockpit") == 0) { dir = entities.entity_array[chase_ent].dir.ReturnConjugate(); position.x = -entities.entity_array[chase_ent].x; position.y = -entities.entity_array[chase_ent].y; position.z = -entities.entity_array[chase_ent].z; }*/ //position.DebugPrint(); GenerateTransform(); }
/* Finish capture and run registration */ void MainWindow::on_CapDone_Btn() { //disconnect pick callback m_3d_View->DisablePick(); std::vector<double*> temp_dst; if (m_3d_View->GetMarkerList().size() == 0) { double a1[] = { 176.286, 195.733, 90.0183 }; double a2[] = { 75.7988, 192.343, 88.1086 }; double a3[] = { 124.12, 139.966, 167.357 }; double a4[] = { 122.669, 40.1707, 116.375 }; temp_dst.push_back(a1); temp_dst.push_back(a2); temp_dst.push_back(a3); temp_dst.push_back(a4); } else { temp_dst = m_3d_View->GetMarkerList(); } //if (m_3d_View->GetMarkerList().size() != m_Marker_Capture->GetMarkerList().size()) //{ // std::cout << "Markers invalid" << std::endl; // m_3d_View->ClearMarkers(); // m_Marker_Capture->ClearMarkers(); //} // start registration here auto temp_src = m_Marker_Capture->GetMarkerList(); auto reg = vtkSmartPointer<vtkTrackingLandMarkRegistration>::New(); reg->SetSourcePoints(temp_src); reg->SetTargetPoints(temp_dst); reg->GenerateTransform(); auto res2 = reg->GetTransformMatrix(); std::cout << "Result" << std::endl; std::cout << "Error is: " << reg->EstimateRegistrationError() << std::endl; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) std::cout << res2->GetElement(i, j) << ","; std::cout << std::endl; } // a messagebox for user to accecpt or discard the error QMessageBox msgBox; msgBox.setWindowTitle("Register Box"); QString msg = "Accept the registration error:\n "; msg = msg + QString::number(reg->EstimateRegistrationError()); msgBox.setInformativeText(msg); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Discard); msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); if (ret == QMessageBox::Yes) { m_3d_View->SetRegisterTransform(res2); //m_3d_View->SetLandMarks(temp_src,temp_dst); } else { m_Marker_Capture->ClearMarkers(); m_3d_View->ClearMarkers(); } }