void MeshBufferReader::setMeshPyramid()
{
    TICK("setupMeshBufferRendering");
    
    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 = std::move(currentMeshPyramid.levels[i]);
        // outputInfoPyramid[i].meshDataGT = currentMeshPyramid.levels[i];
        // outputInfoPyramid[i].meshDataColorDiff = currentMeshPyramid.levels[i];
        outputInfoPyramid[i].nRenderLevel = i;
        outputInfoPyramid[i].meshProj.resize(numVertices, proj2D);
        // outputInfoPyramid[i].meshProjGT = outputInfoPyramid[i].meshProj;
        outputInfoPyramid[i].visibilityMask.resize(numVertices, true);
        memset(outputInfoPyramid[i].camPose, 0, 6*sizeof(double));

        UpdateRenderingData(outputInfoPyramid[i], KK, camPose, outputInfoPyramid[i].meshData);

        //////////////////////////// outputPropPyramid

        if(meshLoadingSettings.loadProp)
        {
            outputPropPyramid[i].meshData = std::move(propMeshPyramid.levels[i]);
            // outputPropPyramid[i].meshDataGT = propMeshPyramid.levels[i];
            // outputPropPyramid[i].meshDataColorDiff = propMeshPyramid.levels[i];
            outputPropPyramid[i].nRenderLevel = i;
            outputPropPyramid[i].meshProj.resize(numVertices, proj2D);
            // outputPropPyramid[i].meshProjGT = outputPropPyramid[i].meshProj;
            outputPropPyramid[i].visibilityMask.resize(numVertices, true);
            memset(outputPropPyramid[i].camPose, 0, 6*sizeof(double));

            UpdateRenderingData(outputPropPyramid[i], KK, camPose, outputPropPyramid[i].meshData);
        }

        // update the visibility of each vertex
        if(useVisibilityMask)
        {
            TICK( "visibilityMask" + std::to_string(i) );

            UpdateVisibilityMaskGL(outputInfoPyramid[i], visibilityMaskPyramid[i], KK, camPose, m_nWidth, m_nHeight);
            if(meshLoadingSettings.loadProp)
            UpdateVisibilityMaskGL(outputPropPyramid[i], visibilityMaskPyramid[i], KK, camPose, m_nWidth, m_nHeight);

            TOCK( "visibilityMask" + std::to_string(i) );
            
        }
    }

    TOCK("setupMeshBufferRendering");
    
}
Esempio n. 2
0
void MainFrame::UpdateVisibilityMask(double toleranceRatio)
{
    vector<bool> visibilityMask;
    UpdateVisibilityMaskGL(outputInfo, visibilityMask, KK, outputInfo.camPose,
        m_nWidth, m_nHeight, toleranceRatio);

}
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");

}