12 #ifndef hifi_FBXSerializer_h
13 #define hifi_FBXSerializer_h
20 #include <glm/glm.hpp>
21 #include <glm/gtc/quaternion.hpp>
24 #include <Transform.h>
25 #include <shared/HifiTypes.h>
28 #include <hfm/HFMSerializer.h>
30 #include <graphics/Geometry.h>
31 #include <graphics/Material.h>
41 glm::vec3 translation;
45 uint8_t currentTextureBlendMode;
49 bool assign(T& ref,
const T& v) {
68 currentTextureBlendMode(0),
73 TextureParam(
const TextureParam& src) :
74 cropping(src.cropping),
76 translation(src.translation),
77 rotation(src.rotation),
79 alphaSource(src.alphaSource),
80 currentTextureBlendMode(src.currentTextureBlendMode),
81 useMaterial(src.useMaterial),
82 isDefault(src.isDefault)
89 glm::vec3 translation;
97 MaterialParam(
const MaterialParam& src) :
98 translation(src.translation),
105 class FBXSerializer :
public HFMSerializer {
107 virtual ~FBXSerializer() {}
109 MediaType getMediaType()
const override;
110 std::unique_ptr<hfm::Serializer::Factory> getFactory()
const override;
115 HFMModel::Pointer read(
const hifi::ByteArray& data,
const hifi::VariantHash& mapping,
const hifi::URL& url = hifi::URL())
override;
118 static FBXNode parseFBX(QIODevice* device);
120 HFMModel* extractHFMModel(
const hifi::VariantHash& mapping,
const QString& url);
122 static ExtractedMesh extractMesh(
const FBXNode&
object,
unsigned int& meshIndex,
bool deduplicate);
123 QHash<QString, ExtractedMesh> meshes;
125 HFMTexture getTexture(
const QString& textureID,
const QString& materialID);
127 QHash<QString, QString> _textureNames;
129 QHash<QString, hifi::ByteArray> _textureFilepaths;
131 QHash<QString, hifi::ByteArray> _textureFilenames;
133 QHash<hifi::ByteArray, hifi::ByteArray> _textureContent;
134 QHash<QString, TextureParam> _textureParams;
137 QHash<QString, QString> diffuseTextures;
138 QHash<QString, QString> diffuseFactorTextures;
139 QHash<QString, QString> transparentTextures;
140 QHash<QString, QString> bumpTextures;
141 QHash<QString, QString> normalTextures;
142 QHash<QString, QString> specularTextures;
143 QHash<QString, QString> metallicTextures;
144 QHash<QString, QString> roughnessTextures;
145 QHash<QString, QString> shininessTextures;
146 QHash<QString, QString> emissiveTextures;
147 QHash<QString, QString> ambientTextures;
148 QHash<QString, QString> ambientFactorTextures;
149 QHash<QString, QString> occlusionTextures;
151 QHash<QString, HFMMaterial> _hfmMaterials;
152 QHash<QString, MaterialParam> _materialParams;
154 void consolidateHFMMaterials();
156 bool _loadLightmaps {
true };
157 float _lightmapOffset { 0.0f };
158 float _lightmapLevel { 1.0f };
160 QMultiMap<QString, QString> _connectionParentMap;
161 QMultiMap<QString, QString> _connectionChildMap;
163 static glm::vec3 getVec3(
const QVariantList& properties,
int index);
164 static QVector<glm::vec4> createVec4Vector(
const QVector<double>& doubleVector);
165 static QVector<glm::vec4> createVec4VectorRGBA(
const QVector<double>& doubleVector, glm::vec4& average);
166 static QVector<glm::vec3> createVec3Vector(
const QVector<double>& doubleVector);
167 static QVector<glm::vec2> createVec2Vector(
const QVector<double>& doubleVector);
168 static glm::mat4 createMat4(
const QVector<double>& doubleVector);
170 static QVector<int> getIntVector(
const FBXNode& node);
171 static QVector<float> getFloatVector(
const FBXNode& node);
172 static QVector<double> getDoubleVector(
const FBXNode& node);
A node within an FBX document.
Definition: FBX.h:41
The runtime model format.
Definition: HFM.h:302
A texture map.
Definition: HFM.h:132