11#include "FgSerial.hpp"
33extern Strings fg3ModeTypeStrs;
45extern Strings fg3ModeSymmStrs;
51 Mat<Floats,2,2>
crd {Floats(50,0),Floats(30,0),Floats(50,0),Floats(),};
57 explicit Sam3Coord(Doubles
const & coord);
59 explicit Sam3Coord(Mat<Floats,2,2>
const & m) :
crd{m} {}
64 Floats
const & ts(uint type,uint symm)
const {
return crd.rc(type,symm); }
65 Floats & ts(uint type,uint symm) {
return crd.rc(type,symm); }
66 Sam3Coord operator*(
float f)
const {
return Sam3Coord{{
crd[0]*f,
crd[1]*f,
crd[2]*f,
crd[3]*f,}}; }
67 inline Sam3Coord operator+(
const Sam3Coord & rhs)
const {
return Sam3Coord{
crd+rhs.crd}; }
68 inline Sam3Coord operator-(
const Sam3Coord & rhs)
const {
return Sam3Coord{
crd-rhs.crd}; }
75 inline bool operator==(
const Sam3Coord & rhs)
const {
return (
crd == rhs.
crd); }
78std::ostream & operator<<(std::ostream &,Sam3Coord
const &);
79inline double cMagD(Sam3Coord
const & sc) {
return cMagD(sc.crd); }
83 Sam3Coord
const & coord0,
84 Sam3Coord
const & coord1,
97 Face3(Sam3Coord
const & c,Bytes
const & d) :
coord(c),
detail(d) {}
98 explicit Face3(String8
const & filename_fg);
101 void load(String8
const & filename_fg);
103 void save(String8
const & filename_fg)
const;
106 bool operator==(
const Face3 & rhs)
const
110typedef Svec<Face3> Face3s;
112std::ostream & operator<<(std::ostream &,Face3
const &);
114inline Face3 loadFg(String8
const & filename)
121inline void saveFg(Face3
const & face,String8
const & fname) {face.save(fname); }
Mat< Floats, 2, 2 > crd
Column vectors for position in face space. column: symm/asym, row: shape/color.
Floats getVector() const
Get the face coordinate as a single vector:
void setVector(Floats const &coord)
Set the face coordinate. Will accept sizes of 50, 80 or 130:
Bytes detail
JPEG-encoded detail modulation in internal UV layout.
Sam3Coord coord
Coordinate of this face in 'face space'.
FanTypeE
Enumerate the statistical model types.
void getDetail(ImgRgba8 &img) const
Decode the JPEG detail texture into FG image format:
FanSymmE
Enumerate symmetry types.
Sam3Coord(Floats const &coord)
Will accept 'coord' sizes of 50, 80 or 130:
void load(String8 const &filename_fg)
Load face from .FG file:
size_t getVectorDim() const
Get the combined dimensionality of the face coordinate:
void save(String8 const &filename_fg) const
Save face to .FG file:
@ FANTYPE_TEX
Texture (color)
@ FANTYPE_GEO
Geometry (shape)
@ FANSYMM_ASYM
Asymmetric.
FaceGen face space coordinate.