14 #ifndef hifi_GLTFSerializer_h
15 #define hifi_GLTFSerializer_h
18 #include <QtNetwork/QNetworkReply>
19 #include <hfm/ModelFormatLogging.h>
20 #include <hfm/HFMSerializer.h>
22 float atof_locale_independent(
char* str);
24 #define CGLTF_ATOF(str) atof_locale_independent(str)
29 class GLTFSerializer :
public QObject,
public HFMSerializer {
32 MediaType getMediaType()
const override;
33 std::unique_ptr<hfm::Serializer::Factory> getFactory()
const override;
35 HFMModel::Pointer read(
const hifi::ByteArray& data,
const hifi::VariantHash& mapping,
const hifi::URL& url = hifi::URL())
override;
38 cgltf_data* _data {
nullptr};
40 QVector<hifi::ByteArray> _externalData;
42 glm::mat4 getModelTransform(
const cgltf_node& node);
43 bool getSkinInverseBindMatrices(std::vector<std::vector<float>>& inverseBindMatrixValues);
44 bool generateTargetData(cgltf_accessor *accessor,
float weight, QVector<glm::vec3>& returnVector);
46 bool buildGeometry(
HFMModel& hfmModel,
const hifi::VariantHash& mapping,
const hifi::URL& url);
48 bool readBinary(
const QString& url, cgltf_buffer &buffer);
50 void retriangulate(
const QVector<int>& in_indices,
const QVector<glm::vec3>& in_vertices,
51 const QVector<glm::vec3>& in_normals, QVector<int>& out_indices,
52 QVector<glm::vec3>& out_vertices, QVector<glm::vec3>& out_normals);
54 std::tuple<bool, hifi::ByteArray> requestData(hifi::URL& url);
55 hifi::ByteArray requestEmbeddedData(
const QString& url);
57 QNetworkReply* request(hifi::URL& url,
bool isTest);
59 void setHFMMaterial(HFMMaterial& hfmMat,
const cgltf_material& material);
60 HFMTexture getHFMTexture(
const cgltf_texture *texture, cgltf_int texCoordSet);
The runtime model format.
Definition: HFM.h:305
A texture map.
Definition: HFM.h:133