21#include "Fg3dMeshIo.hpp"
22#include "FgTransform.hpp"
23#include "FgBounds.hpp"
33uint32
loadEgm_(String8
const & fname,Vec3Fss & symm,Vec3Fss & asym);
35void saveEgm(String8
const & fname,Vec3Fss
const & symm,Vec3Fss
const & asym);
47 explicit Ssm3(String8
const & baseName);
48 explicit Ssm3(Vec3Fs
const & allVerts) : meanVerts{allVerts} {}
49 Ssm3(Vec3Fs
const & allVerts,String8
const & egmFile);
50 Ssm3(Vec3Fs
const & allVerts,
size_t numSymm,
size_t numAsym) : meanVerts(allVerts),
symmModes(numSymm),
asymModes(numAsym) {}
53 bool empty()
const {
return meanVerts.empty(); }
57 void applyCoord_(Floats
const & coord,Vec3Fs & allVerts)
const;
59 void applyCoord_(Floats
const & symm,Floats
const & asym,Vec3Fs & allVerts)
const;
69 void saveModes(String8
const & filename)
const;
71 void transform(SimilarityD
const & sim);
73typedef Svec<Ssm3> Ssm3s;
83 Sam3(Mesh
const & m,
Ssm3 const & s,Scm3s
const & cs) : mesh{m},
ssm{s},
scms{cs} {}
85 explicit Sam3(String8
const & baseName);
86 Sam3(String8
const & ssmBase,String8
const & scmBase);
87 Sam3(String8
const & ssmBase,String8s
const & scmBases);
92 void transform(SimilarityD
const & sim) {mesh.transform_(sim);
ssm.transform(sim); }
94typedef Svec<Sam3> Sam3s;
96void applyFace_(Face3
const & face,Sam3s & sams);
97Mesh applyPose(std::map<String8,float> pose,Sam3
const & sam);
98Meshes applyPose(std::map<String8,float> pose,Sam3s
const & sam3s);
99Mat32F cBounds(Sam3s
const &);
108 explicit MeshSsm3(String8
const & baseName) :
109 mesh {loadMeshAnyFormat(baseName)},
110 ssm {mesh.allVerts(),baseName+
".egm"}
112 MeshSsm3(String8
const & meshName,String8
const & egmName) :
113 mesh {loadMesh(meshName)},
114 ssm {mesh.allVerts(),egmName}
118 void applyCoord(Floats
const & coord);
119 void transform(SimilarityD
const & sim) {mesh.transform_(sim); ssm.transform(sim); }
121 void save(String8
const & baseName)
const;
124SimilarityD cIbfcsToHcsi();
125Rigid3D cIbfcsToFccs();
126SimilarityD cIbfcsToFhcs();
127SimilarityD cIbfcsToClientCS(Vec3Fs
const & ibfClientVerts);
128SimilarityD cIbfcsToClientCS(String8
const & clientInternalBaseFaceFname);
129void cmdGetInternal(CLArgs
const &);
uint32 loadEgm_(String8 const &fname, Vec3Fss &symm, Vec3Fss &asym)
Load statistical shape modes from .EGM file into last two arguments. Returns number of vertices.
Statistical shape model with base mesh.
FaceGen face space coordinate.
Statistical Appearance Model:
Scm3s scms
Updates vertex positions in 'mesh'.
Sam3()
Updates color maps in 'mesh'. Empty if no maps.
void applyFace(Face3 const &face)
Update the shape and color map for 'mesh':
Sam3(String8 const &baseName)
Loads a SAM from all applicable file types starting with 'baseName' (with 0 or 1 color maps):
Ssm3 ssm
Modified by face.
FaceGen 3 Statistical Shape Model.
Ssm3(String8 const &baseName)
Loads a SSM from all applicable file types starting with 'baseName':
Ssm3()
Asymmetric shape modes (by mode then by vertex). Can be empty.
void loadModes(String8 const &filename)
Save modes to .EGM format.
Vec3Fss asymModes
Symmetric shape modes (by mode then by vertex). Can be empty.
Vec3Fss symmModes
Base shape. Can be empty.
bool empty() const
No valid data currently loaded:
Vec3Fs applyCoord(Sam3Coord const &coord) const
Functional version:
void applyCoord_(Floats const &symm, Floats const &asym, Vec3Fs &allVerts) const
Calculate vertex positions given just the shape components of a face coordinate and save to 'allVerts...
void applyCoord_(Floats const &coord, Vec3Fs &allVerts) const
void applyCoord_(Sam3Coord const &coord, Vec3Fs &allVerts) const
Calculate the vertex positions for a given face coordinate and save to 'allVerts'.