這是一篇2005年的siggraph 論文, As-Rigid-As-Possible Shape Manipulation。
源代碼在這裏:http://www.dgp.toronto.edu/~rms/software/Deform2D/。
但下載後, 有幾個錯誤導致不能編譯。 需要修改一下。
首先是stdafx.h 文件, 這裏需要把0x0400和0x0410替換爲0x0501, 這是windwos版本的代號。
其次是RigidMeshDeformer2D.cpp第135行, 我也不太明白爲什麼在這裏等於號報錯, 所以只能採用曲線救國的方法了, 就是先earase這個東西, 然後重新添加了。
void RigidMeshDeformer2D::UpdateConstraint( Constraint & cons )
{
std::set<Constraint>::iterator found( m_vConstraints.find(cons) );
if ( found != m_vConstraints.end() ) {
// (*found).vConstrainedPos = cons.vConstrainedPos;
// m_vDeformedVerts[cons.nVertex].vPosition = cons.vConstrainedPos;
m_vConstraints.erase(found);
m_vConstraints.insert( cons );
m_vDeformedVerts[cons.nVertex].vPosition = cons.vConstrainedPos;
InvalidateSetup();
} else {
m_vConstraints.insert( cons );
m_vDeformedVerts[cons.nVertex].vPosition = cons.vConstrainedPos;
InvalidateSetup();
}
}
最後, 是Deform2d.cpp, 刪除掉&就好。
還有就是直接編譯, debug報錯, 具體參見我的前一篇文章就可。
這樣就能編譯成功並運行了。一下是效果。
enjoy it。