in visualization/FitAdam/include/AdamFastCost.h [714:842]
void UpdateTarget()
{
int offset = 0;
if (regressor_type == 0)
{
for (int ic = 0; ic < fit_data_.adam.m_indices_jointConst_adamIdx.rows(); ic++)
m_targetPts.block(ic * 5, 0, 5, 1) = fit_data_.bodyJoints.block(0, fit_data_.adam.m_indices_jointConst_smcIdx(ic), 5, 1);
offset += fit_data_.adam.m_indices_jointConst_adamIdx.rows();
if (fit_data_.lHandJoints.size() > 0)
{
for (int ic = 0; ic < fit_data_.adam.m_correspond_adam2lHand_adamIdx.rows(); ic++)
m_targetPts.block((offset + ic) * 5, 0, 5, 1) = fit_data_.lHandJoints.block(0, fit_data_.adam.m_correspond_adam2lHand_lHandIdx(ic), 5, 1);
offset += fit_data_.adam.m_correspond_adam2lHand_adamIdx.rows();
}
if (fit_data_.rHandJoints.size() > 0)
{
for (int ic = 0; ic < fit_data_.adam.m_correspond_adam2rHand_adamIdx.rows(); ic++)
m_targetPts.block((offset + ic) * 5, 0, 5, 1) = fit_data_.rHandJoints.block(0, fit_data_.adam.m_correspond_adam2rHand_rHandIdx(ic), 5, 1);
offset += fit_data_.adam.m_correspond_adam2rHand_adamIdx.rows();
}
corres_vertex2targetpt[0].second = {fit_data_.bodyJoints(0, 1), fit_data_.bodyJoints(1, 1), fit_data_.bodyJoints(2, 1), fit_data_.bodyJoints(3, 1), fit_data_.bodyJoints(4, 1)};
corres_vertex2targetpt[1].second = {fit_data_.bodyJoints(0, 16), fit_data_.bodyJoints(1, 16), fit_data_.bodyJoints(2, 16), fit_data_.bodyJoints(3, 16), fit_data_.bodyJoints(4, 16)};
corres_vertex2targetpt[2].second = {fit_data_.bodyJoints(0, 18), fit_data_.bodyJoints(1, 18), fit_data_.bodyJoints(2, 18), fit_data_.bodyJoints(3, 18), fit_data_.bodyJoints(4, 18)};
corres_vertex2targetpt[3].second = {fit_data_.bodyJoints(0, 19), fit_data_.bodyJoints(1, 19), fit_data_.bodyJoints(2, 19), fit_data_.bodyJoints(3, 19), fit_data_.bodyJoints(4, 19)};
corres_vertex2targetpt[4].second = {fit_data_.rFoot(0, 0), fit_data_.rFoot(1, 0), fit_data_.rFoot(2, 0), fit_data_.rFoot(3, 0), fit_data_.rFoot(4, 0)};
corres_vertex2targetpt[5].second = {fit_data_.rFoot(0, 1), fit_data_.rFoot(1, 1), fit_data_.rFoot(2, 1), fit_data_.rFoot(3, 1), fit_data_.rFoot(4, 1)};
corres_vertex2targetpt[6].second = {fit_data_.rFoot(0, 2), fit_data_.rFoot(1, 2), fit_data_.rFoot(2, 2), fit_data_.rFoot(3, 2), fit_data_.rFoot(4, 2)};
corres_vertex2targetpt[7].second = {fit_data_.rFoot(0, 2), fit_data_.rFoot(1, 2), fit_data_.rFoot(2, 2), fit_data_.rFoot(3, 2), fit_data_.rFoot(4, 2)};
corres_vertex2targetpt[8].second = {fit_data_.lFoot(0, 0), fit_data_.lFoot(1, 0), fit_data_.lFoot(2, 0), fit_data_.lFoot(3, 0), fit_data_.lFoot(4, 0)};
corres_vertex2targetpt[9].second = {fit_data_.lFoot(0, 1), fit_data_.lFoot(1, 1), fit_data_.lFoot(2, 1), fit_data_.lFoot(3, 1), fit_data_.lFoot(4, 1)};
corres_vertex2targetpt[10].second = {fit_data_.lFoot(0, 2), fit_data_.lFoot(1, 2), fit_data_.lFoot(2, 2), fit_data_.lFoot(3, 2), fit_data_.lFoot(4, 2)};
corres_vertex2targetpt[11].second = {fit_data_.lFoot(0, 2), fit_data_.lFoot(1, 2), fit_data_.lFoot(2, 2), fit_data_.lFoot(3, 2), fit_data_.lFoot(4, 2)};
for (int r = 0; r < fit_data_.adam.m_correspond_adam2face70_adamIdx.rows(); ++r)
{
int face70ID = fit_data_.adam.m_correspond_adam2face70_face70Idx(r);
if (face70ID < 0) corres_vertex2targetpt[12 + r].second = {{0.0, 0.0, 0.0, 0.0, 0.0}};
else
corres_vertex2targetpt[12 + r].second = {{fit_data_.faceJoints(0, face70ID), fit_data_.faceJoints(1, face70ID), fit_data_.faceJoints(2, face70ID), fit_data_.faceJoints(3, face70ID), fit_data_.faceJoints(4, face70ID)}};
}
if (fit_data_.fit_surface)
{
const int surface_offset = 12 + fit_data_.adam.m_correspond_adam2face70_face70Idx.rows();
for (int i = 0; i < fit_data_.surface_constraint.cols(); i++)
{
corres_vertex2targetpt[surface_offset + i].second = {fit_data_.surface_constraint(0, i), fit_data_.surface_constraint(1, i), fit_data_.surface_constraint(2, i), fit_data_.surface_constraint(3, i), fit_data_.surface_constraint(4, i)};
}
assert(fit_data_.surface_constraint.cols() + surface_offset == corres_vertex2targetpt.size());
}
for (int i = 0; i < corres_vertex2targetpt.size(); i++)
{
std::copy(corres_vertex2targetpt[i].second.data(), corres_vertex2targetpt[i].second.data() + 5, m_targetPts.data() + 5 * (i + offset));
}
}
else if (regressor_type == 1)
{
for(int i = 0; i < fit_data_.adam.h36m_jointConst_smcIdx.size(); i++)
m_targetPts.block(5 * i, 0, 5, 1) = fit_data_.bodyJoints.col(fit_data_.adam.h36m_jointConst_smcIdx[i]);
if (fit_data_.fit_surface)
{
offset = fit_data_.adam.h36m_jointConst_smcIdx.size();
for (int i = 0; i < fit_data_.surface_constraint.cols(); i++)
{
corres_vertex2targetpt[i].second = {fit_data_.surface_constraint(0, i), fit_data_.surface_constraint(1, i), fit_data_.surface_constraint(2, i), fit_data_.surface_constraint(3, i), fit_data_.surface_constraint(4, i)};
}
for (int i = 0; i < corres_vertex2targetpt.size(); i++)
{
std::copy(corres_vertex2targetpt[i].second.data(), corres_vertex2targetpt[i].second.data() + 5, m_targetPts.data() + 5 * (i + offset));
}
}
}
else
{
assert (regressor_type == 2);
for(int i = 0; i < fit_data_.adam.coco_jointConst_smcIdx.size(); i++)
m_targetPts.block(5 * i, 0, 5, 1) = fit_data_.bodyJoints.col(fit_data_.adam.coco_jointConst_smcIdx[i]);
int offset = fit_data_.adam.coco_jointConst_smcIdx.size();
if (fit_data_.lHandJoints.size() > 0)
{
for (int ic = 0; ic < fit_data_.adam.m_correspond_adam2lHand_adamIdx.rows(); ic++)
m_targetPts.block((offset + ic) * 5, 0, 5, 1) = fit_data_.lHandJoints.block(0, fit_data_.adam.m_correspond_adam2lHand_lHandIdx(ic), 5, 1);
offset += fit_data_.adam.m_correspond_adam2lHand_adamIdx.rows();
}
if (fit_data_.rHandJoints.size() > 0)
{
for (int ic = 0; ic < fit_data_.adam.m_correspond_adam2rHand_adamIdx.rows(); ic++)
m_targetPts.block((offset + ic) * 5, 0, 5, 1) = fit_data_.rHandJoints.block(0, fit_data_.adam.m_correspond_adam2rHand_rHandIdx(ic), 5, 1);
offset += fit_data_.adam.m_correspond_adam2rHand_adamIdx.rows();
}
assert(offset == m_nCorrespond_adam2joints); // check the number of constraints
offset = 0;
corres_vertex2targetpt[offset++].second = {fit_data_.rFoot(0, 0), fit_data_.rFoot(1, 0), fit_data_.rFoot(2, 0), fit_data_.rFoot(3, 0), fit_data_.rFoot(4, 0)};
corres_vertex2targetpt[offset++].second = {fit_data_.rFoot(0, 1), fit_data_.rFoot(1, 1), fit_data_.rFoot(2, 1), fit_data_.rFoot(3, 1), fit_data_.rFoot(4, 1)};
corres_vertex2targetpt[offset++].second = {fit_data_.rFoot(0, 2), fit_data_.rFoot(1, 2), fit_data_.rFoot(2, 2), fit_data_.rFoot(3, 2), fit_data_.rFoot(4, 2)};
corres_vertex2targetpt[offset++].second = {fit_data_.rFoot(0, 2), fit_data_.rFoot(1, 2), fit_data_.rFoot(2, 2), fit_data_.rFoot(3, 2), fit_data_.rFoot(4, 2)};
corres_vertex2targetpt[offset++].second = {fit_data_.lFoot(0, 0), fit_data_.lFoot(1, 0), fit_data_.lFoot(2, 0), fit_data_.lFoot(3, 0), fit_data_.lFoot(4, 0)};
corres_vertex2targetpt[offset++].second = {fit_data_.lFoot(0, 1), fit_data_.lFoot(1, 1), fit_data_.lFoot(2, 1), fit_data_.lFoot(3, 1), fit_data_.lFoot(4, 1)};
corres_vertex2targetpt[offset++].second = {fit_data_.lFoot(0, 2), fit_data_.lFoot(1, 2), fit_data_.lFoot(2, 2), fit_data_.lFoot(3, 2), fit_data_.lFoot(4, 2)};
corres_vertex2targetpt[offset++].second = {fit_data_.lFoot(0, 2), fit_data_.lFoot(1, 2), fit_data_.lFoot(2, 2), fit_data_.lFoot(3, 2), fit_data_.lFoot(4, 2)};
for (int r = 0; r < fit_data_.adam.m_correspond_adam2face70_adamIdx.rows(); ++r)
{
int face70ID = fit_data_.adam.m_correspond_adam2face70_face70Idx(r);
if (face70ID < 0) corres_vertex2targetpt[offset++].second = {{0.0, 0.0, 0.0, 0.0, 0.0}};
else
corres_vertex2targetpt[offset++].second = {{fit_data_.faceJoints(0, face70ID), fit_data_.faceJoints(1, face70ID), fit_data_.faceJoints(2, face70ID), fit_data_.faceJoints(3, face70ID), fit_data_.faceJoints(4, face70ID)}};
}
if (fit_data_.fit_surface)
{
for (int i = 0; i < fit_data_.surface_constraint.cols(); i++)
{
corres_vertex2targetpt[offset++].second = {fit_data_.surface_constraint(0, i), fit_data_.surface_constraint(1, i), fit_data_.surface_constraint(2, i), fit_data_.surface_constraint(3, i), fit_data_.surface_constraint(4, i)};
}
}
assert(offset == m_nCorrespond_adam2pts); // check the number of constraints
offset = m_nCorrespond_adam2joints;
for (int i = 0; i < corres_vertex2targetpt.size(); i++)
{
std::copy(corres_vertex2targetpt[i].second.data(), corres_vertex2targetpt[i].second.data() + 5, m_targetPts.data() + 5 * (i + offset));
}
}
}