void MeshSequenceReader::trackerUpdate(TrackerOutputInfo& outputInfo) { TICK("visualRenderingUpdate"); UpdateRenderingData(outputInfo, KK, camPose, currentMesh); UpdateRenderingDataFast(outputInfo, KK, currentMesh); if(useVisibilityMask) { UpdateVisibilityMaskGL(outputInfo, visibilityMask, KK, camPose, m_nWidth, m_nHeight); //UpdateVisibilityMask(outputInfo, visibilityMask, m_nWidth, m_nHeight); UpdateColorDiff(outputInfo, visibilityMask, colorImageSplit); } TOCK("visualRenderingUpdate"); }
void MeshSequenceReader::trackerInitSetup(TrackerOutputInfo& outputInfo) { TICK("visualRenderingInit"); outputInfo.meshData = currentMesh; outputInfo.meshDataGT = outputInfo.meshData; // get 2d projections double X,Y,Z; double u,v,w; vector<CoordinateType> proj2D, proj2DGT; proj2D.resize(2); proj2DGT.resize(2); for(int vertex = 0; vertex < currentMesh.numVertices; ++vertex) { X = currentMesh.vertices[vertex][0]; Y = currentMesh.vertices[vertex][1]; Z = currentMesh.vertices[vertex][2]; if(KK[0][2] == 0) // this is orthographic camera { proj2D[0] = X; proj2D[1] = Y; proj2DGT[0] = X; proj2DGT[1] = Y; } else { u = KK[0][0] * X + KK[0][1] * Y + KK[0][2] * Z; v = KK[1][0] * X + KK[1][1] * Y + KK[1][2] * Z; w = KK[2][0] * X + KK[2][1] * Y + KK[2][2] * Z; if(w != 0) { u = u/w; v = v/w; } proj2D[0] = u; proj2D[1] = v; proj2DGT[0] = u; proj2DGT[1] = v; } outputInfo.meshProj.push_back(proj2D); outputInfo.meshProjGT.push_back(proj2DGT); } outputInfo.visibilityMask.resize(outputInfo.meshData.numVertices,true); // update the visiblity mask if(useVisibilityMask) { UpdateVisibilityMaskGL(outputInfo, visibilityMask, KK, camPose, m_nWidth, m_nHeight); //UpdateVisibilityMask(outputInfo, visibilityMask, m_nWidth, m_nHeight); outputInfo.meshDataColorDiff = outputInfo.meshData; UpdateColorDiff(outputInfo, visibilityMask, colorImageSplit); } // camera pose is always 0 in this case for(int i = 0; i < 6; ++i) outputInfo.camPose[i] = 0; trackerInitialized = true; TOCK("visualRenderingInit"); }
void MeshPyramidReader::setMeshPyramid() { visibilityMaskPyramid.resize(m_nNumMeshLevels); outputInfoPyramid.resize(m_nNumMeshLevels); outputPropPyramid.resize(m_nNumMeshLevels); for(int i = 0; i < m_nNumMeshLevels; ++i) { int numVertices = currentMeshPyramid.levels[i].numVertices; visibilityMaskPyramid[i].resize(numVertices,true); vector<CoordinateType> proj2D; proj2D.resize(2); proj2D[0] = 0; proj2D[1] = 0; outputInfoPyramid[i].meshData = currentMeshPyramid.levels[i]; outputInfoPyramid[i].nRenderLevel = i; outputInfoPyramid[i].meshProj.resize(numVertices, proj2D); outputInfoPyramid[i].visibilityMask.resize(numVertices, true); // memset(outputInfoPyramid[i].camPose, 0, 6*sizeof(double)); // UpdateRenderingData(outputInfoPyramid[i], KK, camPose, outputInfoPyramid[i].meshData); UpdateRenderingDataFast(outputInfoPyramid[i], KK, outputInfoPyramid[i].meshData); if(!meshLoadingSettings.fastLoading) { outputInfoPyramid[i].meshDataGT = outputInfoPyramid[i].meshData; outputInfoPyramid[i].meshDataColorDiff = outputInfoPyramid[i].meshData; outputInfoPyramid[i].meshProjGT = outputInfoPyramid[i].meshProj; } // update the visibility of each vertex if(useVisibilityMask) { TICK( "visibilityMaskLevel" + std::to_string(i) ); UpdateVisibilityMaskGL(outputInfoPyramid[i], visibilityMaskPyramid[i], KK, camPose, m_nWidth, m_nHeight); if(!meshLoadingSettings.fastLoading) UpdateColorDiff(outputInfoPyramid[i], outputInfoPyramid[i].visibilityMask, colorImageSplit); TOCK( "visibilityMaskLevel" + std::to_string(i) ); } //////////////////////////// outputPropPyramid if(meshLoadingSettings.loadProp) { outputPropPyramid[i].meshData = propMeshPyramid.levels[i]; outputPropPyramid[i].nRenderLevel = i; outputPropPyramid[i].meshProj.resize(numVertices, proj2D); outputPropPyramid[i].visibilityMask.resize(numVertices, true); // memset(outputPropPyramid[i].camPose, 0, 6*sizeof(double)); // UpdateRenderingData(outputPropPyramid[i], KK, camPose, propMeshPyramid.levels[i]); UpdateRenderingDataFast(outputPropPyramid[i], KK, propMeshPyramid.levels[i]); if(!meshLoadingSettings.fastLoading) { outputPropPyramid[i].meshDataGT = propMeshPyramid.levels[i]; outputPropPyramid[i].meshDataColorDiff = propMeshPyramid.levels[i]; outputPropPyramid[i].meshProjGT = outputPropPyramid[i].meshProj; } // update the visibility of each vertex if(useVisibilityMask) { UpdateVisibilityMaskGL(outputPropPyramid[i], visibilityMaskPyramid[i], KK, camPose, m_nWidth, m_nHeight); if(!meshLoadingSettings.fastLoading) UpdateColorDiff(outputPropPyramid[i], outputPropPyramid[i].visibilityMask, colorImageSplit); } } } }