mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
Re-name GLTFReader to GLTFSerializer and do the same for other model readers
This commit is contained in:
parent
753557736e
commit
83cc90ace0
26 changed files with 181 additions and 181 deletions
|
@ -14,7 +14,7 @@
|
|||
|
||||
#include <QDialog>
|
||||
|
||||
#include <FBXReader.h>
|
||||
#include <FBXSerializer.h>
|
||||
#include <FSTReader.h>
|
||||
|
||||
#include "ui/ModelsBrowser.h"
|
||||
|
|
|
@ -149,7 +149,7 @@ void CollisionPick::computeShapeInfo(const CollisionRegion& pick, ShapeInfo& sha
|
|||
uint32_t numIndices = (uint32_t)meshPart.triangleIndices.size();
|
||||
// TODO: assert rather than workaround after we start sanitizing HFMMesh higher up
|
||||
//assert(numIndices % TRIANGLE_STRIDE == 0);
|
||||
numIndices -= numIndices % TRIANGLE_STRIDE; // WORKAROUND lack of sanity checking in FBXReader
|
||||
numIndices -= numIndices % TRIANGLE_STRIDE; // WORKAROUND lack of sanity checking in FBXSerializer
|
||||
|
||||
for (uint32_t j = 0; j < numIndices; j += TRIANGLE_STRIDE) {
|
||||
glm::vec3 p0 = mesh.vertices[meshPart.triangleIndices[j]];
|
||||
|
@ -170,7 +170,7 @@ void CollisionPick::computeShapeInfo(const CollisionRegion& pick, ShapeInfo& sha
|
|||
numIndices = (uint32_t)meshPart.quadIndices.size();
|
||||
// TODO: assert rather than workaround after we start sanitizing HFMMesh higher up
|
||||
//assert(numIndices % QUAD_STRIDE == 0);
|
||||
numIndices -= numIndices % QUAD_STRIDE; // WORKAROUND lack of sanity checking in FBXReader
|
||||
numIndices -= numIndices % QUAD_STRIDE; // WORKAROUND lack of sanity checking in FBXSerializer
|
||||
|
||||
for (uint32_t j = 0; j < numIndices; j += QUAD_STRIDE) {
|
||||
glm::vec3 p0 = mesh.vertices[meshPart.quadIndices[j]];
|
||||
|
@ -305,7 +305,7 @@ void CollisionPick::computeShapeInfo(const CollisionRegion& pick, ShapeInfo& sha
|
|||
auto numIndices = meshPart.triangleIndices.count();
|
||||
// TODO: assert rather than workaround after we start sanitizing HFMMesh higher up
|
||||
//assert(numIndices% TRIANGLE_STRIDE == 0);
|
||||
numIndices -= numIndices % TRIANGLE_STRIDE; // WORKAROUND lack of sanity checking in FBXReader
|
||||
numIndices -= numIndices % TRIANGLE_STRIDE; // WORKAROUND lack of sanity checking in FBXSerializer
|
||||
|
||||
auto indexItr = meshPart.triangleIndices.cbegin();
|
||||
while (indexItr != meshPart.triangleIndices.cend()) {
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/quaternion.hpp>
|
||||
|
||||
#include <FBXReader.h>
|
||||
#include <FBXSerializer.h>
|
||||
#include "AnimPose.h"
|
||||
|
||||
class AnimSkeleton {
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#include <QtScript/QScriptValue>
|
||||
|
||||
#include <DependencyManager.h>
|
||||
#include <FBXReader.h>
|
||||
#include <FBXSerializer.h>
|
||||
#include <ResourceCache.h>
|
||||
|
||||
class Animation;
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include <QObject>
|
||||
#include <QScriptable>
|
||||
|
||||
#include <FBXReader.h>
|
||||
#include <FBXSerializer.h>
|
||||
|
||||
class QScriptEngine;
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
#include <PathUtils.h>
|
||||
|
||||
#include <FBXReader.h>
|
||||
#include <FBXSerializer.h>
|
||||
#include <FBXWriter.h>
|
||||
|
||||
#include "ModelBakingLoggingCategory.h"
|
||||
|
@ -187,10 +187,10 @@ void FBXBaker::importScene() {
|
|||
return;
|
||||
}
|
||||
|
||||
FBXReader reader;
|
||||
FBXSerializer serializer;
|
||||
|
||||
qCDebug(model_baking) << "Parsing" << _modelURL;
|
||||
_rootNode = reader._rootNode = reader.parseFBX(&fbxFile);
|
||||
_rootNode = serializer._rootNode = serializer.parseFBX(&fbxFile);
|
||||
|
||||
#ifdef HIFI_DUMP_FBX
|
||||
{
|
||||
|
@ -206,8 +206,8 @@ void FBXBaker::importScene() {
|
|||
}
|
||||
#endif
|
||||
|
||||
_hfmModel = reader.extractHFMModel({}, _modelURL.toString());
|
||||
_textureContentMap = reader._textureContent;
|
||||
_hfmModel = serializer.extractHFMModel({}, _modelURL.toString());
|
||||
_textureContentMap = serializer._textureContent;
|
||||
}
|
||||
|
||||
void FBXBaker::rewriteAndBakeSceneModels() {
|
||||
|
@ -232,7 +232,7 @@ void FBXBaker::rewriteAndBakeSceneModels() {
|
|||
if (objectChild.name == "Geometry") {
|
||||
|
||||
// TODO Pull this out of _hfmModel instead so we don't have to reprocess it
|
||||
auto extractedMesh = FBXReader::extractMesh(objectChild, meshIndex, false);
|
||||
auto extractedMesh = FBXSerializer::extractMesh(objectChild, meshIndex, false);
|
||||
|
||||
// Callback to get MaterialID
|
||||
GetMaterialIDCallback materialIDcallback = [&extractedMesh](int partIndex) {
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
#include <PathUtils.h>
|
||||
|
||||
#include <FBXReader.h>
|
||||
#include <FBXSerializer.h>
|
||||
#include <FBXWriter.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include <PathUtils.h>
|
||||
#include <NetworkAccessManager.h>
|
||||
|
||||
#include "OBJReader.h"
|
||||
#include "OBJSerializer.h"
|
||||
#include "FBXWriter.h"
|
||||
|
||||
const double UNIT_SCALE_FACTOR = 100.0;
|
||||
|
@ -143,9 +143,9 @@ void OBJBaker::bakeOBJ() {
|
|||
|
||||
QByteArray objData = objFile.readAll();
|
||||
|
||||
bool combineParts = true; // set true so that OBJReader reads material info from material library
|
||||
OBJReader reader;
|
||||
auto geometry = reader.readOBJ(objData, QVariantHash(), combineParts, _modelURL);
|
||||
bool combineParts = true; // set true so that OBJSerializer reads material info from material library
|
||||
OBJSerializer serializer;
|
||||
auto geometry = serializer.readOBJ(objData, QVariantHash(), combineParts, _modelURL);
|
||||
|
||||
// Write OBJ Data as FBX tree nodes
|
||||
createFBXNodeTree(_rootNode, *geometry);
|
||||
|
@ -219,7 +219,7 @@ void OBJBaker::createFBXNodeTree(FBXNode& rootNode, HFMModel& hfmModel) {
|
|||
FBXNode materialNode;
|
||||
materialNode.name = MATERIAL_NODE_NAME;
|
||||
if (hfmModel.materials.size() == 1) {
|
||||
// case when no material information is provided, OBJReader considers it as a single default material
|
||||
// case when no material information is provided, OBJSerializer considers it as a single default material
|
||||
for (auto& materialID : hfmModel.materials.keys()) {
|
||||
setMaterialNodeProperties(materialNode, materialID, hfmModel);
|
||||
}
|
||||
|
|
|
@ -421,7 +421,7 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) {
|
|||
uint32_t numIndices = (uint32_t)meshPart.triangleIndices.size();
|
||||
// TODO: assert rather than workaround after we start sanitizing HFMMesh higher up
|
||||
//assert(numIndices % TRIANGLE_STRIDE == 0);
|
||||
numIndices -= numIndices % TRIANGLE_STRIDE; // WORKAROUND lack of sanity checking in FBXReader
|
||||
numIndices -= numIndices % TRIANGLE_STRIDE; // WORKAROUND lack of sanity checking in FBXSerializer
|
||||
|
||||
for (uint32_t j = 0; j < numIndices; j += TRIANGLE_STRIDE) {
|
||||
glm::vec3 p0 = mesh.vertices[meshPart.triangleIndices[j]];
|
||||
|
@ -442,7 +442,7 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) {
|
|||
numIndices = (uint32_t)meshPart.quadIndices.size();
|
||||
// TODO: assert rather than workaround after we start sanitizing HFMMesh higher up
|
||||
//assert(numIndices % QUAD_STRIDE == 0);
|
||||
numIndices -= numIndices % QUAD_STRIDE; // WORKAROUND lack of sanity checking in FBXReader
|
||||
numIndices -= numIndices % QUAD_STRIDE; // WORKAROUND lack of sanity checking in FBXSerializer
|
||||
|
||||
for (uint32_t j = 0; j < numIndices; j += QUAD_STRIDE) {
|
||||
glm::vec3 p0 = mesh.vertices[meshPart.quadIndices[j]];
|
||||
|
@ -595,7 +595,7 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) {
|
|||
if (partItr->_topology == graphics::Mesh::TRIANGLES) {
|
||||
// TODO: assert rather than workaround after we start sanitizing HFMMesh higher up
|
||||
//assert(numIndices % TRIANGLE_STRIDE == 0);
|
||||
numIndices -= numIndices % TRIANGLE_STRIDE; // WORKAROUND lack of sanity checking in FBXReader
|
||||
numIndices -= numIndices % TRIANGLE_STRIDE; // WORKAROUND lack of sanity checking in FBXSerializer
|
||||
|
||||
auto indexItr = indices.cbegin<const gpu::BufferView::Index>() + partItr->_startIndex;
|
||||
auto indexEnd = indexItr + numIndices;
|
||||
|
@ -652,7 +652,7 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) {
|
|||
if (partItr->_topology == graphics::Mesh::TRIANGLES) {
|
||||
// TODO: assert rather than workaround after we start sanitizing HFMMesh higher up
|
||||
//assert(numIndices% TRIANGLE_STRIDE == 0);
|
||||
numIndices -= numIndices % TRIANGLE_STRIDE; // WORKAROUND lack of sanity checking in FBXReader
|
||||
numIndices -= numIndices % TRIANGLE_STRIDE; // WORKAROUND lack of sanity checking in FBXSerializer
|
||||
|
||||
auto indexItr = indices.cbegin<const gpu::BufferView::Index>() + partItr->_startIndex;
|
||||
auto indexEnd = indexItr + numIndices;
|
||||
|
|
|
@ -33,7 +33,7 @@ using NormalType = glm::vec3;
|
|||
#define FBX_NORMAL_ELEMENT gpu::Element::VEC3F_XYZ
|
||||
#endif
|
||||
|
||||
// See comment in FBXReader::parseFBX().
|
||||
// See comment in FBXSerializer::parseFBX().
|
||||
static const int FBX_HEADER_BYTES_BEFORE_VERSION = 23;
|
||||
static const QByteArray FBX_BINARY_PROLOG("Kaydara FBX Binary ");
|
||||
static const QByteArray FBX_BINARY_PROLOG2("\0\x1a\0", 3);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// FBXReader.cpp
|
||||
// FBXSerializer.cpp
|
||||
// interface/src/renderer
|
||||
//
|
||||
// Created by Andrzej Kapolka on 9/18/13.
|
||||
|
@ -9,7 +9,7 @@
|
|||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#include "FBXReader.h"
|
||||
#include "FBXSerializer.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <QBuffer>
|
||||
|
@ -36,7 +36,7 @@
|
|||
#include <hfm/ModelFormatLogging.h>
|
||||
|
||||
// TOOL: Uncomment the following line to enable the filtering of all the unkwnon fields of a node so we can break point easily while loading a model with problems...
|
||||
//#define DEBUG_FBXREADER
|
||||
//#define DEBUG_FBXSERIALIZER
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
@ -254,13 +254,13 @@ HFMBlendshape extractBlendshape(const FBXNode& object) {
|
|||
HFMBlendshape blendshape;
|
||||
foreach (const FBXNode& data, object.children) {
|
||||
if (data.name == "Indexes") {
|
||||
blendshape.indices = FBXReader::getIntVector(data);
|
||||
blendshape.indices = FBXSerializer::getIntVector(data);
|
||||
|
||||
} else if (data.name == "Vertices") {
|
||||
blendshape.vertices = FBXReader::createVec3Vector(FBXReader::getDoubleVector(data));
|
||||
blendshape.vertices = FBXSerializer::createVec3Vector(FBXSerializer::getDoubleVector(data));
|
||||
|
||||
} else if (data.name == "Normals") {
|
||||
blendshape.normals = FBXReader::createVec3Vector(FBXReader::getDoubleVector(data));
|
||||
blendshape.normals = FBXSerializer::createVec3Vector(FBXSerializer::getDoubleVector(data));
|
||||
}
|
||||
}
|
||||
return blendshape;
|
||||
|
@ -384,7 +384,7 @@ HFMLight extractLight(const FBXNode& object) {
|
|||
if (propname == "Intensity") {
|
||||
light.intensity = 0.01f * property.properties.at(valIndex).value<float>();
|
||||
} else if (propname == "Color") {
|
||||
light.color = FBXReader::getVec3(property.properties, valIndex);
|
||||
light.color = FBXSerializer::getVec3(property.properties, valIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -392,7 +392,7 @@ HFMLight extractLight(const FBXNode& object) {
|
|||
|| subobject.name == "TypeFlags") {
|
||||
}
|
||||
}
|
||||
#if defined(DEBUG_FBXREADER)
|
||||
#if defined(DEBUG_FBXSERIALIZER)
|
||||
|
||||
QString type = object.properties.at(0).toString();
|
||||
type = object.properties.at(1).toString();
|
||||
|
@ -417,7 +417,7 @@ QByteArray fileOnUrl(const QByteArray& filepath, const QString& url) {
|
|||
return filepath.mid(filepath.lastIndexOf('/') + 1);
|
||||
}
|
||||
|
||||
HFMModel* FBXReader::extractHFMModel(const QVariantHash& mapping, const QString& url) {
|
||||
HFMModel* FBXSerializer::extractHFMModel(const QVariantHash& mapping, const QString& url) {
|
||||
const FBXNode& node = _rootNode;
|
||||
QMap<QString, ExtractedMesh> meshes;
|
||||
QHash<QString, QString> modelIDsToNames;
|
||||
|
@ -488,7 +488,7 @@ HFMModel* FBXReader::extractHFMModel(const QVariantHash& mapping, const QString&
|
|||
}
|
||||
}
|
||||
QMultiHash<QString, WeightedIndex> blendshapeChannelIndices;
|
||||
#if defined(DEBUG_FBXREADER)
|
||||
#if defined(DEBUG_FBXSERIALIZER)
|
||||
int unknown = 0;
|
||||
#endif
|
||||
HFMModel* hfmModelPtr = new HFMModel;
|
||||
|
@ -736,7 +736,7 @@ HFMModel* FBXReader::extractHFMModel(const QVariantHash& mapping, const QString&
|
|||
extractBlendshape(subobject) };
|
||||
blendshapes.append(blendshape);
|
||||
}
|
||||
#if defined(DEBUG_FBXREADER)
|
||||
#if defined(DEBUG_FBXSERIALIZER)
|
||||
else if (subobject.name == "TypeFlags") {
|
||||
QString attributetype = subobject.properties.at(0).toString();
|
||||
if (!attributetype.empty()) {
|
||||
|
@ -862,7 +862,7 @@ HFMModel* FBXReader::extractHFMModel(const QVariantHash& mapping, const QString&
|
|||
tex.scaling.z = 1.0f;
|
||||
}
|
||||
}
|
||||
#if defined(DEBUG_FBXREADER)
|
||||
#if defined(DEBUG_FBXSERIALIZER)
|
||||
else {
|
||||
QString propName = v;
|
||||
unknown++;
|
||||
|
@ -871,7 +871,7 @@ HFMModel* FBXReader::extractHFMModel(const QVariantHash& mapping, const QString&
|
|||
}
|
||||
}
|
||||
}
|
||||
#if defined(DEBUG_FBXREADER)
|
||||
#if defined(DEBUG_FBXSERIALIZER)
|
||||
else {
|
||||
if (subobject.name == "Type") {
|
||||
} else if (subobject.name == "Version") {
|
||||
|
@ -1044,7 +1044,7 @@ HFMModel* FBXReader::extractHFMModel(const QVariantHash& mapping, const QString&
|
|||
}
|
||||
}
|
||||
}
|
||||
#if defined(DEBUG_FBXREADER)
|
||||
#if defined(DEBUG_FBXSERIALIZER)
|
||||
else {
|
||||
QString propname = subobject.name.data();
|
||||
int unknown = 0;
|
||||
|
@ -1061,7 +1061,7 @@ HFMModel* FBXReader::extractHFMModel(const QVariantHash& mapping, const QString&
|
|||
|
||||
|
||||
} else if (object.name == "NodeAttribute") {
|
||||
#if defined(DEBUG_FBXREADER)
|
||||
#if defined(DEBUG_FBXSERIALIZER)
|
||||
std::vector<QString> properties;
|
||||
foreach(const QVariant& v, object.properties) {
|
||||
properties.push_back(v.toString());
|
||||
|
@ -1124,7 +1124,7 @@ HFMModel* FBXReader::extractHFMModel(const QVariantHash& mapping, const QString&
|
|||
animationCurves.insert(getID(object.properties), curve);
|
||||
|
||||
}
|
||||
#if defined(DEBUG_FBXREADER)
|
||||
#if defined(DEBUG_FBXSERIALIZER)
|
||||
else {
|
||||
QString objectname = object.name.data();
|
||||
if ( objectname == "Pose"
|
||||
|
@ -1215,7 +1215,7 @@ HFMModel* FBXReader::extractHFMModel(const QVariantHash& mapping, const QString&
|
|||
}
|
||||
}
|
||||
}
|
||||
#if defined(DEBUG_FBXREADER)
|
||||
#if defined(DEBUG_FBXSERIALIZER)
|
||||
else {
|
||||
QString objectname = child.name.data();
|
||||
if ( objectname == "Pose"
|
||||
|
@ -1803,12 +1803,12 @@ HFMModel* readFBX(const QByteArray& data, const QVariantHash& mapping, const QSt
|
|||
}
|
||||
|
||||
HFMModel* readFBX(QIODevice* device, const QVariantHash& mapping, const QString& url, bool loadLightmaps, float lightmapLevel) {
|
||||
FBXReader reader;
|
||||
reader._rootNode = FBXReader::parseFBX(device);
|
||||
reader._loadLightmaps = loadLightmaps;
|
||||
reader._lightmapLevel = lightmapLevel;
|
||||
FBXSerializer serializer;
|
||||
serializer._rootNode = FBXSerializer::parseFBX(device);
|
||||
serializer._loadLightmaps = loadLightmaps;
|
||||
serializer._lightmapLevel = lightmapLevel;
|
||||
|
||||
qCDebug(modelformat) << "Reading FBX: " << url;
|
||||
|
||||
return reader.extractHFMModel(mapping, url);
|
||||
return serializer.extractHFMModel(mapping, url);
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// FBXReader.h
|
||||
// FBXSerializer.h
|
||||
// interface/src/renderer
|
||||
//
|
||||
// Created by Andrzej Kapolka on 9/18/13.
|
||||
|
@ -9,8 +9,8 @@
|
|||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#ifndef hifi_FBXReader_h
|
||||
#define hifi_FBXReader_h
|
||||
#ifndef hifi_FBXSerializer_h
|
||||
#define hifi_FBXSerializer_h
|
||||
|
||||
#include <QtGlobal>
|
||||
#include <QMetaType>
|
||||
|
@ -102,7 +102,7 @@ public:
|
|||
|
||||
class ExtractedMesh;
|
||||
|
||||
class FBXReader {
|
||||
class FBXSerializer {
|
||||
public:
|
||||
HFMModel* _hfmModel;
|
||||
|
||||
|
@ -166,4 +166,4 @@ public:
|
|||
static QVector<double> getDoubleVector(const FBXNode& node);
|
||||
};
|
||||
|
||||
#endif // hifi_FBXReader_h
|
||||
#endif // hifi_FBXSerializer_h
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// FBXReader_Material.cpp
|
||||
// FBXSerializer_Material.cpp
|
||||
// interface/src/fbx
|
||||
//
|
||||
// Created by Sam Gateau on 8/27/2015.
|
||||
|
@ -9,7 +9,7 @@
|
|||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#include "FBXReader.h"
|
||||
#include "FBXSerializer.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
|
@ -27,7 +27,7 @@
|
|||
|
||||
#include <hfm/ModelFormatLogging.h>
|
||||
|
||||
HFMTexture FBXReader::getTexture(const QString& textureID) {
|
||||
HFMTexture FBXSerializer::getTexture(const QString& textureID) {
|
||||
HFMTexture texture;
|
||||
const QByteArray& filepath = _textureFilepaths.value(textureID);
|
||||
texture.content = _textureContent.value(filepath);
|
||||
|
@ -69,7 +69,7 @@ HFMTexture FBXReader::getTexture(const QString& textureID) {
|
|||
return texture;
|
||||
}
|
||||
|
||||
void FBXReader::consolidateHFMMaterials(const QVariantHash& mapping) {
|
||||
void FBXSerializer::consolidateHFMMaterials(const QVariantHash& mapping) {
|
||||
|
||||
QString materialMapString = mapping.value("materialMap").toString();
|
||||
QJsonDocument materialMapDocument = QJsonDocument::fromJson(materialMapString.toUtf8());
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// FBXReader_Mesh.cpp
|
||||
// FBXSerializer_Mesh.cpp
|
||||
// interface/src/fbx
|
||||
//
|
||||
// Created by Sam Gateau on 8/27/2015.
|
||||
|
@ -33,7 +33,7 @@
|
|||
#include <LogHandler.h>
|
||||
#include <hfm/ModelFormatLogging.h>
|
||||
|
||||
#include "FBXReader.h"
|
||||
#include "FBXSerializer.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
|
@ -191,7 +191,7 @@ void appendIndex(MeshData& data, QVector<int>& indices, int index, bool deduplic
|
|||
}
|
||||
}
|
||||
|
||||
ExtractedMesh FBXReader::extractMesh(const FBXNode& object, unsigned int& meshIndex, bool deduplicate) {
|
||||
ExtractedMesh FBXSerializer::extractMesh(const FBXNode& object, unsigned int& meshIndex, bool deduplicate) {
|
||||
MeshData data;
|
||||
data.extracted.mesh.meshIndex = meshIndex++;
|
||||
|
||||
|
@ -254,7 +254,7 @@ ExtractedMesh FBXReader::extractMesh(const FBXNode& object, unsigned int& meshIn
|
|||
data.colorsByVertex = true;
|
||||
}
|
||||
|
||||
#if defined(FBXREADER_KILL_BLACK_COLOR_ATTRIBUTE)
|
||||
#if defined(FBXSERIALIZER_KILL_BLACK_COLOR_ATTRIBUTE)
|
||||
// Potential feature where we decide to kill the color attribute is to dark?
|
||||
// Tested with the model:
|
||||
// https://hifi-public.s3.amazonaws.com/ryan/gardenLight2.fbx
|
||||
|
@ -281,7 +281,7 @@ ExtractedMesh FBXReader::extractMesh(const FBXNode& object, unsigned int& meshIn
|
|||
} else if (subdata.name == "Name") {
|
||||
attrib.name = subdata.properties.at(0).toString();
|
||||
}
|
||||
#if defined(DEBUG_FBXREADER)
|
||||
#if defined(DEBUG_FBXSERIALIZER)
|
||||
else {
|
||||
int unknown = 0;
|
||||
QString subname = subdata.name.data();
|
||||
|
@ -307,7 +307,7 @@ ExtractedMesh FBXReader::extractMesh(const FBXNode& object, unsigned int& meshIn
|
|||
} else if (subdata.name == "Name") {
|
||||
attrib.name = subdata.properties.at(0).toString();
|
||||
}
|
||||
#if defined(DEBUG_FBXREADER)
|
||||
#if defined(DEBUG_FBXSERIALIZER)
|
||||
else {
|
||||
int unknown = 0;
|
||||
QString subname = subdata.name.data();
|
||||
|
@ -557,7 +557,7 @@ ExtractedMesh FBXReader::extractMesh(const FBXNode& object, unsigned int& meshIn
|
|||
return data.extracted;
|
||||
}
|
||||
|
||||
glm::vec3 FBXReader::normalizeDirForPacking(const glm::vec3& dir) {
|
||||
glm::vec3 FBXSerializer::normalizeDirForPacking(const glm::vec3& dir) {
|
||||
auto maxCoord = glm::max(fabsf(dir.x), glm::max(fabsf(dir.y), fabsf(dir.z)));
|
||||
if (maxCoord > 1e-6f) {
|
||||
return dir / maxCoord;
|
||||
|
@ -565,7 +565,7 @@ glm::vec3 FBXReader::normalizeDirForPacking(const glm::vec3& dir) {
|
|||
return dir;
|
||||
}
|
||||
|
||||
void FBXReader::buildModelMesh(HFMMesh& extractedMesh, const QString& url) {
|
||||
void FBXSerializer::buildModelMesh(HFMMesh& extractedMesh, const QString& url) {
|
||||
unsigned int totalSourceIndices = 0;
|
||||
foreach(const HFMMeshPart& part, extractedMesh.parts) {
|
||||
totalSourceIndices += (part.quadTrianglesIndices.size() + part.triangleIndices.size());
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// FBXReader_Node.cpp
|
||||
// FBXSerializer_Node.cpp
|
||||
// interface/src/fbx
|
||||
//
|
||||
// Created by Sam Gateau on 8/27/2015.
|
||||
|
@ -9,7 +9,7 @@
|
|||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#include "FBXReader.h"
|
||||
#include "FBXSerializer.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <QtCore/QBuffer>
|
||||
|
@ -345,7 +345,7 @@ FBXNode parseTextFBXNode(Tokenizer& tokenizer) {
|
|||
return node;
|
||||
}
|
||||
|
||||
FBXNode FBXReader::parseFBX(QIODevice* device) {
|
||||
FBXNode FBXSerializer::parseFBX(QIODevice* device) {
|
||||
PROFILE_RANGE_EX(resource_parse, __FUNCTION__, 0xff0000ff, device);
|
||||
// verify the prolog
|
||||
if (device->peek(FBX_BINARY_PROLOG.size()) != FBX_BINARY_PROLOG) {
|
||||
|
@ -398,12 +398,12 @@ FBXNode FBXReader::parseFBX(QIODevice* device) {
|
|||
}
|
||||
|
||||
|
||||
glm::vec3 FBXReader::getVec3(const QVariantList& properties, int index) {
|
||||
glm::vec3 FBXSerializer::getVec3(const QVariantList& properties, int index) {
|
||||
return glm::vec3(properties.at(index).value<double>(), properties.at(index + 1).value<double>(),
|
||||
properties.at(index + 2).value<double>());
|
||||
}
|
||||
|
||||
QVector<glm::vec4> FBXReader::createVec4Vector(const QVector<double>& doubleVector) {
|
||||
QVector<glm::vec4> FBXSerializer::createVec4Vector(const QVector<double>& doubleVector) {
|
||||
QVector<glm::vec4> values;
|
||||
for (const double* it = doubleVector.constData(), *end = it + ((doubleVector.size() / 4) * 4); it != end; ) {
|
||||
float x = *it++;
|
||||
|
@ -416,7 +416,7 @@ QVector<glm::vec4> FBXReader::createVec4Vector(const QVector<double>& doubleVect
|
|||
}
|
||||
|
||||
|
||||
QVector<glm::vec4> FBXReader::createVec4VectorRGBA(const QVector<double>& doubleVector, glm::vec4& average) {
|
||||
QVector<glm::vec4> FBXSerializer::createVec4VectorRGBA(const QVector<double>& doubleVector, glm::vec4& average) {
|
||||
QVector<glm::vec4> values;
|
||||
for (const double* it = doubleVector.constData(), *end = it + ((doubleVector.size() / 4) * 4); it != end; ) {
|
||||
float x = *it++;
|
||||
|
@ -433,7 +433,7 @@ QVector<glm::vec4> FBXReader::createVec4VectorRGBA(const QVector<double>& double
|
|||
return values;
|
||||
}
|
||||
|
||||
QVector<glm::vec3> FBXReader::createVec3Vector(const QVector<double>& doubleVector) {
|
||||
QVector<glm::vec3> FBXSerializer::createVec3Vector(const QVector<double>& doubleVector) {
|
||||
QVector<glm::vec3> values;
|
||||
for (const double* it = doubleVector.constData(), *end = it + ((doubleVector.size() / 3) * 3); it != end; ) {
|
||||
float x = *it++;
|
||||
|
@ -444,7 +444,7 @@ QVector<glm::vec3> FBXReader::createVec3Vector(const QVector<double>& doubleVect
|
|||
return values;
|
||||
}
|
||||
|
||||
QVector<glm::vec2> FBXReader::createVec2Vector(const QVector<double>& doubleVector) {
|
||||
QVector<glm::vec2> FBXSerializer::createVec2Vector(const QVector<double>& doubleVector) {
|
||||
QVector<glm::vec2> values;
|
||||
for (const double* it = doubleVector.constData(), *end = it + ((doubleVector.size() / 2) * 2); it != end; ) {
|
||||
float s = *it++;
|
||||
|
@ -454,14 +454,14 @@ QVector<glm::vec2> FBXReader::createVec2Vector(const QVector<double>& doubleVect
|
|||
return values;
|
||||
}
|
||||
|
||||
glm::mat4 FBXReader::createMat4(const QVector<double>& doubleVector) {
|
||||
glm::mat4 FBXSerializer::createMat4(const QVector<double>& doubleVector) {
|
||||
return glm::mat4(doubleVector.at(0), doubleVector.at(1), doubleVector.at(2), doubleVector.at(3),
|
||||
doubleVector.at(4), doubleVector.at(5), doubleVector.at(6), doubleVector.at(7),
|
||||
doubleVector.at(8), doubleVector.at(9), doubleVector.at(10), doubleVector.at(11),
|
||||
doubleVector.at(12), doubleVector.at(13), doubleVector.at(14), doubleVector.at(15));
|
||||
}
|
||||
|
||||
QVector<int> FBXReader::getIntVector(const FBXNode& node) {
|
||||
QVector<int> FBXSerializer::getIntVector(const FBXNode& node) {
|
||||
foreach (const FBXNode& child, node.children) {
|
||||
if (child.name == "a") {
|
||||
return getIntVector(child);
|
||||
|
@ -480,7 +480,7 @@ QVector<int> FBXReader::getIntVector(const FBXNode& node) {
|
|||
return vector;
|
||||
}
|
||||
|
||||
QVector<float> FBXReader::getFloatVector(const FBXNode& node) {
|
||||
QVector<float> FBXSerializer::getFloatVector(const FBXNode& node) {
|
||||
foreach (const FBXNode& child, node.children) {
|
||||
if (child.name == "a") {
|
||||
return getFloatVector(child);
|
||||
|
@ -499,7 +499,7 @@ QVector<float> FBXReader::getFloatVector(const FBXNode& node) {
|
|||
return vector;
|
||||
}
|
||||
|
||||
QVector<double> FBXReader::getDoubleVector(const FBXNode& node) {
|
||||
QVector<double> FBXSerializer::getDoubleVector(const FBXNode& node) {
|
||||
foreach (const FBXNode& child, node.children) {
|
||||
if (child.name == "a") {
|
||||
return getDoubleVector(child);
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// GLTFReader.cpp
|
||||
// GLTFSerializer.cpp
|
||||
// libraries/fbx/src
|
||||
//
|
||||
// Created by Luis Cuenca on 8/30/17.
|
||||
|
@ -9,7 +9,7 @@
|
|||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#include "GLTFReader.h"
|
||||
#include "GLTFSerializer.h"
|
||||
|
||||
#include <QtCore/QBuffer>
|
||||
#include <QtCore/QIODevice>
|
||||
|
@ -33,14 +33,14 @@
|
|||
#include <ResourceManager.h>
|
||||
#include <PathUtils.h>
|
||||
|
||||
#include "FBXReader.h"
|
||||
#include "FBXSerializer.h"
|
||||
|
||||
|
||||
GLTFReader::GLTFReader() {
|
||||
GLTFSerializer::GLTFSerializer() {
|
||||
|
||||
}
|
||||
|
||||
bool GLTFReader::getStringVal(const QJsonObject& object, const QString& fieldname,
|
||||
bool GLTFSerializer::getStringVal(const QJsonObject& object, const QString& fieldname,
|
||||
QString& value, QMap<QString, bool>& defined) {
|
||||
bool _defined = (object.contains(fieldname) && object[fieldname].isString());
|
||||
if (_defined) {
|
||||
|
@ -50,7 +50,7 @@ bool GLTFReader::getStringVal(const QJsonObject& object, const QString& fieldnam
|
|||
return _defined;
|
||||
}
|
||||
|
||||
bool GLTFReader::getBoolVal(const QJsonObject& object, const QString& fieldname,
|
||||
bool GLTFSerializer::getBoolVal(const QJsonObject& object, const QString& fieldname,
|
||||
bool& value, QMap<QString, bool>& defined) {
|
||||
bool _defined = (object.contains(fieldname) && object[fieldname].isBool());
|
||||
if (_defined) {
|
||||
|
@ -60,7 +60,7 @@ bool GLTFReader::getBoolVal(const QJsonObject& object, const QString& fieldname,
|
|||
return _defined;
|
||||
}
|
||||
|
||||
bool GLTFReader::getIntVal(const QJsonObject& object, const QString& fieldname,
|
||||
bool GLTFSerializer::getIntVal(const QJsonObject& object, const QString& fieldname,
|
||||
int& value, QMap<QString, bool>& defined) {
|
||||
bool _defined = (object.contains(fieldname) && !object[fieldname].isNull());
|
||||
if (_defined) {
|
||||
|
@ -70,7 +70,7 @@ bool GLTFReader::getIntVal(const QJsonObject& object, const QString& fieldname,
|
|||
return _defined;
|
||||
}
|
||||
|
||||
bool GLTFReader::getDoubleVal(const QJsonObject& object, const QString& fieldname,
|
||||
bool GLTFSerializer::getDoubleVal(const QJsonObject& object, const QString& fieldname,
|
||||
double& value, QMap<QString, bool>& defined) {
|
||||
bool _defined = (object.contains(fieldname) && object[fieldname].isDouble());
|
||||
if (_defined) {
|
||||
|
@ -79,7 +79,7 @@ bool GLTFReader::getDoubleVal(const QJsonObject& object, const QString& fieldnam
|
|||
defined.insert(fieldname, _defined);
|
||||
return _defined;
|
||||
}
|
||||
bool GLTFReader::getObjectVal(const QJsonObject& object, const QString& fieldname,
|
||||
bool GLTFSerializer::getObjectVal(const QJsonObject& object, const QString& fieldname,
|
||||
QJsonObject& value, QMap<QString, bool>& defined) {
|
||||
bool _defined = (object.contains(fieldname) && object[fieldname].isObject());
|
||||
if (_defined) {
|
||||
|
@ -89,7 +89,7 @@ bool GLTFReader::getObjectVal(const QJsonObject& object, const QString& fieldnam
|
|||
return _defined;
|
||||
}
|
||||
|
||||
bool GLTFReader::getIntArrayVal(const QJsonObject& object, const QString& fieldname,
|
||||
bool GLTFSerializer::getIntArrayVal(const QJsonObject& object, const QString& fieldname,
|
||||
QVector<int>& values, QMap<QString, bool>& defined) {
|
||||
bool _defined = (object.contains(fieldname) && object[fieldname].isArray());
|
||||
if (_defined) {
|
||||
|
@ -104,7 +104,7 @@ bool GLTFReader::getIntArrayVal(const QJsonObject& object, const QString& fieldn
|
|||
return _defined;
|
||||
}
|
||||
|
||||
bool GLTFReader::getDoubleArrayVal(const QJsonObject& object, const QString& fieldname,
|
||||
bool GLTFSerializer::getDoubleArrayVal(const QJsonObject& object, const QString& fieldname,
|
||||
QVector<double>& values, QMap<QString, bool>& defined) {
|
||||
bool _defined = (object.contains(fieldname) && object[fieldname].isArray());
|
||||
if (_defined) {
|
||||
|
@ -119,7 +119,7 @@ bool GLTFReader::getDoubleArrayVal(const QJsonObject& object, const QString& fie
|
|||
return _defined;
|
||||
}
|
||||
|
||||
bool GLTFReader::getObjectArrayVal(const QJsonObject& object, const QString& fieldname,
|
||||
bool GLTFSerializer::getObjectArrayVal(const QJsonObject& object, const QString& fieldname,
|
||||
QJsonArray& objects, QMap<QString, bool>& defined) {
|
||||
bool _defined = (object.contains(fieldname) && object[fieldname].isArray());
|
||||
if (_defined) {
|
||||
|
@ -129,7 +129,7 @@ bool GLTFReader::getObjectArrayVal(const QJsonObject& object, const QString& fie
|
|||
return _defined;
|
||||
}
|
||||
|
||||
int GLTFReader::getMeshPrimitiveRenderingMode(const QString& type)
|
||||
int GLTFSerializer::getMeshPrimitiveRenderingMode(const QString& type)
|
||||
{
|
||||
if (type == "POINTS") {
|
||||
return GLTFMeshPrimitivesRenderingMode::POINTS;
|
||||
|
@ -155,7 +155,7 @@ int GLTFReader::getMeshPrimitiveRenderingMode(const QString& type)
|
|||
return GLTFMeshPrimitivesRenderingMode::TRIANGLES;
|
||||
}
|
||||
|
||||
int GLTFReader::getAccessorType(const QString& type)
|
||||
int GLTFSerializer::getAccessorType(const QString& type)
|
||||
{
|
||||
if (type == "SCALAR") {
|
||||
return GLTFAccessorType::SCALAR;
|
||||
|
@ -181,7 +181,7 @@ int GLTFReader::getAccessorType(const QString& type)
|
|||
return GLTFAccessorType::SCALAR;
|
||||
}
|
||||
|
||||
int GLTFReader::getMaterialAlphaMode(const QString& type)
|
||||
int GLTFSerializer::getMaterialAlphaMode(const QString& type)
|
||||
{
|
||||
if (type == "OPAQUE") {
|
||||
return GLTFMaterialAlphaMode::OPAQUE;
|
||||
|
@ -195,7 +195,7 @@ int GLTFReader::getMaterialAlphaMode(const QString& type)
|
|||
return GLTFMaterialAlphaMode::OPAQUE;
|
||||
}
|
||||
|
||||
int GLTFReader::getCameraType(const QString& type)
|
||||
int GLTFSerializer::getCameraType(const QString& type)
|
||||
{
|
||||
if (type == "orthographic") {
|
||||
return GLTFCameraTypes::ORTHOGRAPHIC;
|
||||
|
@ -206,7 +206,7 @@ int GLTFReader::getCameraType(const QString& type)
|
|||
return GLTFCameraTypes::PERSPECTIVE;
|
||||
}
|
||||
|
||||
int GLTFReader::getImageMimeType(const QString& mime)
|
||||
int GLTFSerializer::getImageMimeType(const QString& mime)
|
||||
{
|
||||
if (mime == "image/jpeg") {
|
||||
return GLTFImageMimetype::JPEG;
|
||||
|
@ -217,7 +217,7 @@ int GLTFReader::getImageMimeType(const QString& mime)
|
|||
return GLTFImageMimetype::JPEG;
|
||||
}
|
||||
|
||||
int GLTFReader::getAnimationSamplerInterpolation(const QString& interpolation)
|
||||
int GLTFSerializer::getAnimationSamplerInterpolation(const QString& interpolation)
|
||||
{
|
||||
if (interpolation == "LINEAR") {
|
||||
return GLTFAnimationSamplerInterpolation::LINEAR;
|
||||
|
@ -225,7 +225,7 @@ int GLTFReader::getAnimationSamplerInterpolation(const QString& interpolation)
|
|||
return GLTFAnimationSamplerInterpolation::LINEAR;
|
||||
}
|
||||
|
||||
bool GLTFReader::setAsset(const QJsonObject& object) {
|
||||
bool GLTFSerializer::setAsset(const QJsonObject& object) {
|
||||
QJsonObject jsAsset;
|
||||
bool isAssetDefined = getObjectVal(object, "asset", jsAsset, _file.defined);
|
||||
if (isAssetDefined) {
|
||||
|
@ -239,7 +239,7 @@ bool GLTFReader::setAsset(const QJsonObject& object) {
|
|||
return isAssetDefined;
|
||||
}
|
||||
|
||||
bool GLTFReader::addAccessor(const QJsonObject& object) {
|
||||
bool GLTFSerializer::addAccessor(const QJsonObject& object) {
|
||||
GLTFAccessor accessor;
|
||||
|
||||
getIntVal(object, "bufferView", accessor.bufferView, accessor.defined);
|
||||
|
@ -259,7 +259,7 @@ bool GLTFReader::addAccessor(const QJsonObject& object) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool GLTFReader::addAnimation(const QJsonObject& object) {
|
||||
bool GLTFSerializer::addAnimation(const QJsonObject& object) {
|
||||
GLTFAnimation animation;
|
||||
|
||||
QJsonArray channels;
|
||||
|
@ -297,7 +297,7 @@ bool GLTFReader::addAnimation(const QJsonObject& object) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool GLTFReader::addBufferView(const QJsonObject& object) {
|
||||
bool GLTFSerializer::addBufferView(const QJsonObject& object) {
|
||||
GLTFBufferView bufferview;
|
||||
|
||||
getIntVal(object, "buffer", bufferview.buffer, bufferview.defined);
|
||||
|
@ -310,7 +310,7 @@ bool GLTFReader::addBufferView(const QJsonObject& object) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool GLTFReader::addBuffer(const QJsonObject& object) {
|
||||
bool GLTFSerializer::addBuffer(const QJsonObject& object) {
|
||||
GLTFBuffer buffer;
|
||||
|
||||
getIntVal(object, "byteLength", buffer.byteLength, buffer.defined);
|
||||
|
@ -324,7 +324,7 @@ bool GLTFReader::addBuffer(const QJsonObject& object) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool GLTFReader::addCamera(const QJsonObject& object) {
|
||||
bool GLTFSerializer::addCamera(const QJsonObject& object) {
|
||||
GLTFCamera camera;
|
||||
|
||||
QJsonObject jsPerspective;
|
||||
|
@ -352,7 +352,7 @@ bool GLTFReader::addCamera(const QJsonObject& object) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool GLTFReader::addImage(const QJsonObject& object) {
|
||||
bool GLTFSerializer::addImage(const QJsonObject& object) {
|
||||
GLTFImage image;
|
||||
|
||||
QString mime;
|
||||
|
@ -367,7 +367,7 @@ bool GLTFReader::addImage(const QJsonObject& object) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool GLTFReader::getIndexFromObject(const QJsonObject& object, const QString& field,
|
||||
bool GLTFSerializer::getIndexFromObject(const QJsonObject& object, const QString& field,
|
||||
int& outidx, QMap<QString, bool>& defined) {
|
||||
QJsonObject subobject;
|
||||
if (getObjectVal(object, field, subobject, defined)) {
|
||||
|
@ -377,7 +377,7 @@ bool GLTFReader::getIndexFromObject(const QJsonObject& object, const QString& fi
|
|||
return false;
|
||||
}
|
||||
|
||||
bool GLTFReader::addMaterial(const QJsonObject& object) {
|
||||
bool GLTFSerializer::addMaterial(const QJsonObject& object) {
|
||||
GLTFMaterial material;
|
||||
|
||||
getStringVal(object, "name", material.name, material.defined);
|
||||
|
@ -413,7 +413,7 @@ bool GLTFReader::addMaterial(const QJsonObject& object) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool GLTFReader::addMesh(const QJsonObject& object) {
|
||||
bool GLTFSerializer::addMesh(const QJsonObject& object) {
|
||||
GLTFMesh mesh;
|
||||
|
||||
getStringVal(object, "name", mesh.name, mesh.defined);
|
||||
|
@ -467,7 +467,7 @@ bool GLTFReader::addMesh(const QJsonObject& object) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool GLTFReader::addNode(const QJsonObject& object) {
|
||||
bool GLTFSerializer::addNode(const QJsonObject& object) {
|
||||
GLTFNode node;
|
||||
|
||||
getStringVal(object, "name", node.name, node.defined);
|
||||
|
@ -487,7 +487,7 @@ bool GLTFReader::addNode(const QJsonObject& object) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool GLTFReader::addSampler(const QJsonObject& object) {
|
||||
bool GLTFSerializer::addSampler(const QJsonObject& object) {
|
||||
GLTFSampler sampler;
|
||||
|
||||
getIntVal(object, "magFilter", sampler.magFilter, sampler.defined);
|
||||
|
@ -501,7 +501,7 @@ bool GLTFReader::addSampler(const QJsonObject& object) {
|
|||
|
||||
}
|
||||
|
||||
bool GLTFReader::addScene(const QJsonObject& object) {
|
||||
bool GLTFSerializer::addScene(const QJsonObject& object) {
|
||||
GLTFScene scene;
|
||||
|
||||
getStringVal(object, "name", scene.name, scene.defined);
|
||||
|
@ -511,7 +511,7 @@ bool GLTFReader::addScene(const QJsonObject& object) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool GLTFReader::addSkin(const QJsonObject& object) {
|
||||
bool GLTFSerializer::addSkin(const QJsonObject& object) {
|
||||
GLTFSkin skin;
|
||||
|
||||
getIntVal(object, "inverseBindMatrices", skin.inverseBindMatrices, skin.defined);
|
||||
|
@ -523,7 +523,7 @@ bool GLTFReader::addSkin(const QJsonObject& object) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool GLTFReader::addTexture(const QJsonObject& object) {
|
||||
bool GLTFSerializer::addTexture(const QJsonObject& object) {
|
||||
GLTFTexture texture;
|
||||
getIntVal(object, "sampler", texture.sampler, texture.defined);
|
||||
getIntVal(object, "source", texture.source, texture.defined);
|
||||
|
@ -533,7 +533,7 @@ bool GLTFReader::addTexture(const QJsonObject& object) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool GLTFReader::parseGLTF(const QByteArray& data) {
|
||||
bool GLTFSerializer::parseGLTF(const QByteArray& data) {
|
||||
PROFILE_RANGE_EX(resource_parse, __FUNCTION__, 0xffff0000, nullptr);
|
||||
|
||||
QJsonDocument d = QJsonDocument::fromJson(data);
|
||||
|
@ -664,7 +664,7 @@ bool GLTFReader::parseGLTF(const QByteArray& data) {
|
|||
return true;
|
||||
}
|
||||
|
||||
glm::mat4 GLTFReader::getModelTransform(const GLTFNode& node) {
|
||||
glm::mat4 GLTFSerializer::getModelTransform(const GLTFNode& node) {
|
||||
glm::mat4 tmat = glm::mat4(1.0);
|
||||
|
||||
if (node.defined["matrix"] && node.matrix.size() == 16) {
|
||||
|
@ -697,7 +697,7 @@ glm::mat4 GLTFReader::getModelTransform(const GLTFNode& node) {
|
|||
return tmat;
|
||||
}
|
||||
|
||||
bool GLTFReader::buildGeometry(HFMModel& hfmModel, const QUrl& url) {
|
||||
bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const QUrl& url) {
|
||||
|
||||
//Build dependencies
|
||||
QVector<QVector<int>> nodeDependencies(_file.nodes.size());
|
||||
|
@ -899,7 +899,7 @@ bool GLTFReader::buildGeometry(HFMModel& hfmModel, const QUrl& url) {
|
|||
}
|
||||
|
||||
mesh.meshIndex = hfmModel.meshes.size();
|
||||
FBXReader::buildModelMesh(mesh, url.toString());
|
||||
FBXSerializer::buildModelMesh(mesh, url.toString());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -910,7 +910,7 @@ bool GLTFReader::buildGeometry(HFMModel& hfmModel, const QUrl& url) {
|
|||
return true;
|
||||
}
|
||||
|
||||
HFMModel* GLTFReader::readGLTF(QByteArray& data, const QVariantHash& mapping,
|
||||
HFMModel* GLTFSerializer::readGLTF(QByteArray& data, const QVariantHash& mapping,
|
||||
const QUrl& url, bool loadLightmaps, float lightmapLevel) {
|
||||
|
||||
_url = url;
|
||||
|
@ -934,7 +934,7 @@ HFMModel* GLTFReader::readGLTF(QByteArray& data, const QVariantHash& mapping,
|
|||
|
||||
}
|
||||
|
||||
bool GLTFReader::readBinary(const QString& url, QByteArray& outdata) {
|
||||
bool GLTFSerializer::readBinary(const QString& url, QByteArray& outdata) {
|
||||
QUrl binaryUrl = _url.resolved(url);
|
||||
|
||||
qCDebug(modelformat) << "binaryUrl: " << binaryUrl << " OriginalUrl: " << _url;
|
||||
|
@ -944,7 +944,7 @@ bool GLTFReader::readBinary(const QString& url, QByteArray& outdata) {
|
|||
return success;
|
||||
}
|
||||
|
||||
bool GLTFReader::doesResourceExist(const QString& url) {
|
||||
bool GLTFSerializer::doesResourceExist(const QString& url) {
|
||||
if (_url.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
@ -952,9 +952,9 @@ bool GLTFReader::doesResourceExist(const QString& url) {
|
|||
return DependencyManager::get<ResourceManager>()->resourceExists(candidateUrl);
|
||||
}
|
||||
|
||||
std::tuple<bool, QByteArray> GLTFReader::requestData(QUrl& url) {
|
||||
std::tuple<bool, QByteArray> GLTFSerializer::requestData(QUrl& url) {
|
||||
auto request = DependencyManager::get<ResourceManager>()->createResourceRequest(
|
||||
nullptr, url, true, -1, "GLTFReader::requestData");
|
||||
nullptr, url, true, -1, "GLTFSerializer::requestData");
|
||||
|
||||
if (!request) {
|
||||
return std::make_tuple(false, QByteArray());
|
||||
|
@ -973,7 +973,7 @@ std::tuple<bool, QByteArray> GLTFReader::requestData(QUrl& url) {
|
|||
}
|
||||
|
||||
|
||||
QNetworkReply* GLTFReader::request(QUrl& url, bool isTest) {
|
||||
QNetworkReply* GLTFSerializer::request(QUrl& url, bool isTest) {
|
||||
if (!qApp) {
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -997,7 +997,7 @@ QNetworkReply* GLTFReader::request(QUrl& url, bool isTest) {
|
|||
return netReply; // trying to sync later on.
|
||||
}
|
||||
|
||||
HFMTexture GLTFReader::getHFMTexture(const GLTFTexture& texture) {
|
||||
HFMTexture GLTFSerializer::getHFMTexture(const GLTFTexture& texture) {
|
||||
HFMTexture fbxtex = HFMTexture();
|
||||
fbxtex.texcoordSet = 0;
|
||||
|
||||
|
@ -1014,7 +1014,7 @@ HFMTexture GLTFReader::getHFMTexture(const GLTFTexture& texture) {
|
|||
return fbxtex;
|
||||
}
|
||||
|
||||
void GLTFReader::setHFMMaterial(HFMMaterial& fbxmat, const GLTFMaterial& material) {
|
||||
void GLTFSerializer::setHFMMaterial(HFMMaterial& fbxmat, const GLTFMaterial& material) {
|
||||
|
||||
|
||||
if (material.defined["name"]) {
|
||||
|
@ -1077,7 +1077,7 @@ void GLTFReader::setHFMMaterial(HFMMaterial& fbxmat, const GLTFMaterial& materia
|
|||
}
|
||||
|
||||
template<typename T, typename L>
|
||||
bool GLTFReader::readArray(const QByteArray& bin, int byteOffset, int count,
|
||||
bool GLTFSerializer::readArray(const QByteArray& bin, int byteOffset, int count,
|
||||
QVector<L>& outarray, int accessorType) {
|
||||
|
||||
QDataStream blobstream(bin);
|
||||
|
@ -1134,7 +1134,7 @@ bool GLTFReader::readArray(const QByteArray& bin, int byteOffset, int count,
|
|||
return true;
|
||||
}
|
||||
template<typename T>
|
||||
bool GLTFReader::addArrayOfType(const QByteArray& bin, int byteOffset, int count,
|
||||
bool GLTFSerializer::addArrayOfType(const QByteArray& bin, int byteOffset, int count,
|
||||
QVector<T>& outarray, int accessorType, int componentType) {
|
||||
|
||||
switch (componentType) {
|
||||
|
@ -1158,7 +1158,7 @@ bool GLTFReader::addArrayOfType(const QByteArray& bin, int byteOffset, int count
|
|||
return false;
|
||||
}
|
||||
|
||||
void GLTFReader::retriangulate(const QVector<int>& inIndices, const QVector<glm::vec3>& in_vertices,
|
||||
void GLTFSerializer::retriangulate(const QVector<int>& inIndices, const QVector<glm::vec3>& in_vertices,
|
||||
const QVector<glm::vec3>& in_normals, QVector<int>& outIndices,
|
||||
QVector<glm::vec3>& out_vertices, QVector<glm::vec3>& out_normals) {
|
||||
for (int i = 0; i < inIndices.size(); i = i + 3) {
|
||||
|
@ -1181,7 +1181,7 @@ void GLTFReader::retriangulate(const QVector<int>& inIndices, const QVector<glm:
|
|||
}
|
||||
}
|
||||
|
||||
void GLTFReader::hfmDebugDump(const HFMModel& hfmModel) {
|
||||
void GLTFSerializer::hfmDebugDump(const HFMModel& hfmModel) {
|
||||
qCDebug(modelformat) << "---------------- hfmModel ----------------";
|
||||
qCDebug(modelformat) << " hasSkeletonJoints =" << hfmModel.hasSkeletonJoints;
|
||||
qCDebug(modelformat) << " offset =" << hfmModel.offset;
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// GLTFReader.h
|
||||
// GLTFSerializer.h
|
||||
// libraries/fbx/src
|
||||
//
|
||||
// Created by Luis Cuenca on 8/30/17.
|
||||
|
@ -9,13 +9,13 @@
|
|||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#ifndef hifi_GLTFReader_h
|
||||
#define hifi_GLTFReader_h
|
||||
#ifndef hifi_GLTFSerializer_h
|
||||
#define hifi_GLTFSerializer_h
|
||||
|
||||
#include <memory.h>
|
||||
#include <QtNetwork/QNetworkReply>
|
||||
#include <hfm/ModelFormatLogging.h>
|
||||
#include "FBXReader.h"
|
||||
#include "FBXSerializer.h"
|
||||
|
||||
|
||||
struct GLTFAsset {
|
||||
|
@ -702,10 +702,10 @@ struct GLTFFile {
|
|||
}
|
||||
};
|
||||
|
||||
class GLTFReader : public QObject {
|
||||
class GLTFSerializer : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
GLTFReader();
|
||||
GLTFSerializer();
|
||||
HFMModel* readGLTF(QByteArray& data, const QVariantHash& mapping,
|
||||
const QUrl& url, bool loadLightmaps = true, float lightmapLevel = 1.0f);
|
||||
private:
|
||||
|
@ -783,4 +783,4 @@ private:
|
|||
void hfmDebugDump(const HFMModel& hfmModel);
|
||||
};
|
||||
|
||||
#endif // hifi_GLTFReader_h
|
||||
#endif // hifi_GLTFSerializer_h
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// OBJReader.cpp
|
||||
// OBJSerializer.cpp
|
||||
// libraries/fbx/src/
|
||||
//
|
||||
// Created by Seth Alves on 3/7/15.
|
||||
|
@ -12,7 +12,7 @@
|
|||
// http://www.scratchapixel.com/old/lessons/3d-advanced-lessons/obj-file-format/obj-file-format/
|
||||
// http://paulbourke.net/dataformats/obj/
|
||||
|
||||
#include "OBJReader.h"
|
||||
#include "OBJSerializer.h"
|
||||
|
||||
#include <ctype.h> // .obj files are not locale-specific. The C/ASCII charset applies.
|
||||
#include <sstream>
|
||||
|
@ -27,7 +27,7 @@
|
|||
#include <NetworkAccessManager.h>
|
||||
#include <ResourceManager.h>
|
||||
|
||||
#include "FBXReader.h"
|
||||
#include "FBXSerializer.h"
|
||||
#include <hfm/ModelFormatLogging.h>
|
||||
#include <shared/PlatformHacks.h>
|
||||
|
||||
|
@ -238,7 +238,7 @@ void OBJFace::addFrom(const OBJFace* face, int index) { // add using data from f
|
|||
}
|
||||
}
|
||||
|
||||
bool OBJReader::isValidTexture(const QByteArray &filename) {
|
||||
bool OBJSerializer::isValidTexture(const QByteArray &filename) {
|
||||
if (_url.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
@ -247,7 +247,7 @@ bool OBJReader::isValidTexture(const QByteArray &filename) {
|
|||
return DependencyManager::get<ResourceManager>()->resourceExists(candidateUrl);
|
||||
}
|
||||
|
||||
void OBJReader::parseMaterialLibrary(QIODevice* device) {
|
||||
void OBJSerializer::parseMaterialLibrary(QIODevice* device) {
|
||||
OBJTokenizer tokenizer(device);
|
||||
QString matName = SMART_DEFAULT_MATERIAL_NAME;
|
||||
OBJMaterial& currentMaterial = materials[matName];
|
||||
|
@ -255,7 +255,7 @@ void OBJReader::parseMaterialLibrary(QIODevice* device) {
|
|||
switch (tokenizer.nextToken()) {
|
||||
case OBJTokenizer::COMMENT_TOKEN:
|
||||
#ifdef WANT_DEBUG
|
||||
qCDebug(modelformat) << "OBJ Reader MTLLIB comment:" << tokenizer.getComment();
|
||||
qCDebug(modelformat) << "OBJSerializer MTLLIB comment:" << tokenizer.getComment();
|
||||
#endif
|
||||
break;
|
||||
case OBJTokenizer::DATUM_TOKEN:
|
||||
|
@ -264,7 +264,7 @@ void OBJReader::parseMaterialLibrary(QIODevice* device) {
|
|||
materials[matName] = currentMaterial;
|
||||
#ifdef WANT_DEBUG
|
||||
qCDebug(modelformat) <<
|
||||
"OBJ Reader Last material illumination model:" << currentMaterial.illuminationModel <<
|
||||
"OBJSerializer Last material illumination model:" << currentMaterial.illuminationModel <<
|
||||
" shininess:" << currentMaterial.shininess <<
|
||||
" opacity:" << currentMaterial.opacity <<
|
||||
" diffuse color:" << currentMaterial.diffuseColor <<
|
||||
|
@ -287,7 +287,7 @@ void OBJReader::parseMaterialLibrary(QIODevice* device) {
|
|||
matName = tokenizer.getDatum();
|
||||
currentMaterial = materials[matName];
|
||||
#ifdef WANT_DEBUG
|
||||
qCDebug(modelformat) << "OBJ Reader Starting new material definition " << matName;
|
||||
qCDebug(modelformat) << "OBJSerializer Starting new material definition " << matName;
|
||||
#endif
|
||||
currentMaterial.diffuseTextureFilename = "";
|
||||
currentMaterial.emissiveTextureFilename = "";
|
||||
|
@ -299,7 +299,7 @@ void OBJReader::parseMaterialLibrary(QIODevice* device) {
|
|||
currentMaterial.shininess = tokenizer.getFloat();
|
||||
} else if (token == "Ni") {
|
||||
#ifdef WANT_DEBUG
|
||||
qCDebug(modelformat) << "OBJ Reader Ignoring material Ni " << tokenizer.getFloat();
|
||||
qCDebug(modelformat) << "OBJSerializer Ignoring material Ni " << tokenizer.getFloat();
|
||||
#else
|
||||
tokenizer.getFloat();
|
||||
#endif
|
||||
|
@ -311,13 +311,13 @@ void OBJReader::parseMaterialLibrary(QIODevice* device) {
|
|||
currentMaterial.illuminationModel = tokenizer.getFloat();
|
||||
} else if (token == "Tf") {
|
||||
#ifdef WANT_DEBUG
|
||||
qCDebug(modelformat) << "OBJ Reader Ignoring material Tf " << tokenizer.getVec3();
|
||||
qCDebug(modelformat) << "OBJSerializer Ignoring material Tf " << tokenizer.getVec3();
|
||||
#else
|
||||
tokenizer.getVec3();
|
||||
#endif
|
||||
} else if (token == "Ka") {
|
||||
#ifdef WANT_DEBUG
|
||||
qCDebug(modelformat) << "OBJ Reader Ignoring material Ka " << tokenizer.getVec3();;
|
||||
qCDebug(modelformat) << "OBJSerializer Ignoring material Ka " << tokenizer.getVec3();;
|
||||
#else
|
||||
tokenizer.getVec3();
|
||||
#endif
|
||||
|
@ -334,7 +334,7 @@ void OBJReader::parseMaterialLibrary(QIODevice* device) {
|
|||
parseTextureLine(textureLine, filename, textureOptions);
|
||||
if (filename.endsWith(".tga")) {
|
||||
#ifdef WANT_DEBUG
|
||||
qCDebug(modelformat) << "OBJ Reader WARNING: currently ignoring tga texture " << filename << " in " << _url;
|
||||
qCDebug(modelformat) << "OBJSerializer WARNING: currently ignoring tga texture " << filename << " in " << _url;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
@ -354,7 +354,7 @@ void OBJReader::parseMaterialLibrary(QIODevice* device) {
|
|||
}
|
||||
}
|
||||
|
||||
void OBJReader::parseTextureLine(const QByteArray& textureLine, QByteArray& filename, OBJMaterialTextureOptions& textureOptions) {
|
||||
void OBJSerializer::parseTextureLine(const QByteArray& textureLine, QByteArray& filename, OBJMaterialTextureOptions& textureOptions) {
|
||||
// Texture options reference http://paulbourke.net/dataformats/mtl/
|
||||
// and https://wikivisually.com/wiki/Material_Template_Library
|
||||
|
||||
|
@ -368,7 +368,7 @@ void OBJReader::parseTextureLine(const QByteArray& textureLine, QByteArray& file
|
|||
if (option == "-blendu" || option == "-blendv") {
|
||||
#ifdef WANT_DEBUG
|
||||
const std::string& onoff = parser[i++];
|
||||
qCDebug(modelformat) << "OBJ Reader WARNING: Ignoring texture option" << option.c_str() << onoff.c_str();
|
||||
qCDebug(modelformat) << "OBJSerializer WARNING: Ignoring texture option" << option.c_str() << onoff.c_str();
|
||||
#endif
|
||||
} else if (option == "-bm") {
|
||||
const std::string& bm = parser[i++];
|
||||
|
@ -377,22 +377,22 @@ void OBJReader::parseTextureLine(const QByteArray& textureLine, QByteArray& file
|
|||
#ifdef WANT_DEBUG
|
||||
const std::string& boost = parser[i++];
|
||||
float boostFloat = std::stof(boost);
|
||||
qCDebug(modelformat) << "OBJ Reader WARNING: Ignoring texture option" << option.c_str() << boost.c_str();
|
||||
qCDebug(modelformat) << "OBJSerializer WARNING: Ignoring texture option" << option.c_str() << boost.c_str();
|
||||
#endif
|
||||
} else if (option == "-cc") {
|
||||
#ifdef WANT_DEBUG
|
||||
const std::string& onoff = parser[i++];
|
||||
qCDebug(modelformat) << "OBJ Reader WARNING: Ignoring texture option" << option.c_str() << onoff.c_str();
|
||||
qCDebug(modelformat) << "OBJSerializer WARNING: Ignoring texture option" << option.c_str() << onoff.c_str();
|
||||
#endif
|
||||
} else if (option == "-clamp") {
|
||||
#ifdef WANT_DEBUG
|
||||
const std::string& onoff = parser[i++];
|
||||
qCDebug(modelformat) << "OBJ Reader WARNING: Ignoring texture option" << option.c_str() << onoff.c_str();
|
||||
qCDebug(modelformat) << "OBJSerializer WARNING: Ignoring texture option" << option.c_str() << onoff.c_str();
|
||||
#endif
|
||||
} else if (option == "-imfchan") {
|
||||
#ifdef WANT_DEBUG
|
||||
const std::string& imfchan = parser[i++];
|
||||
qCDebug(modelformat) << "OBJ Reader WARNING: Ignoring texture option" << option.c_str() << imfchan.c_str();
|
||||
qCDebug(modelformat) << "OBJSerializer WARNING: Ignoring texture option" << option.c_str() << imfchan.c_str();
|
||||
#endif
|
||||
} else if (option == "-mm") {
|
||||
if (i + 1 < parser.size()) {
|
||||
|
@ -401,7 +401,7 @@ void OBJReader::parseTextureLine(const QByteArray& textureLine, QByteArray& file
|
|||
const std::string& mmGain = parser[i++];
|
||||
float mmBaseFloat = std::stof(mmBase);
|
||||
float mmGainFloat = std::stof(mmGain);
|
||||
qCDebug(modelformat) << "OBJ Reader WARNING: Ignoring texture option" << option.c_str() << mmBase.c_str() << mmGain.c_str();
|
||||
qCDebug(modelformat) << "OBJSerializer WARNING: Ignoring texture option" << option.c_str() << mmBase.c_str() << mmGain.c_str();
|
||||
#endif
|
||||
}
|
||||
} else if (option == "-o" || option == "-s" || option == "-t") {
|
||||
|
@ -413,23 +413,23 @@ void OBJReader::parseTextureLine(const QByteArray& textureLine, QByteArray& file
|
|||
float uFloat = std::stof(u);
|
||||
float vFloat = std::stof(v);
|
||||
float wFloat = std::stof(w);
|
||||
qCDebug(modelformat) << "OBJ Reader WARNING: Ignoring texture option" << option.c_str() << u.c_str() << v.c_str() << w.c_str();
|
||||
qCDebug(modelformat) << "OBJSerializer WARNING: Ignoring texture option" << option.c_str() << u.c_str() << v.c_str() << w.c_str();
|
||||
#endif
|
||||
}
|
||||
} else if (option == "-texres") {
|
||||
#ifdef WANT_DEBUG
|
||||
const std::string& texres = parser[i++];
|
||||
float texresFloat = std::stof(texres);
|
||||
qCDebug(modelformat) << "OBJ Reader WARNING: Ignoring texture option" << option.c_str() << texres.c_str();
|
||||
qCDebug(modelformat) << "OBJSerializer WARNING: Ignoring texture option" << option.c_str() << texres.c_str();
|
||||
#endif
|
||||
} else if (option == "-type") {
|
||||
#ifdef WANT_DEBUG
|
||||
const std::string& type = parser[i++];
|
||||
qCDebug(modelformat) << "OBJ Reader WARNING: Ignoring texture option" << option.c_str() << type.c_str();
|
||||
qCDebug(modelformat) << "OBJSerializer WARNING: Ignoring texture option" << option.c_str() << type.c_str();
|
||||
#endif
|
||||
} else if (option[0] == '-') {
|
||||
#ifdef WANT_DEBUG
|
||||
qCDebug(modelformat) << "OBJ Reader WARNING: Ignoring unsupported texture option" << option.c_str();
|
||||
qCDebug(modelformat) << "OBJSerializer WARNING: Ignoring unsupported texture option" << option.c_str();
|
||||
#endif
|
||||
}
|
||||
} else { // assume filename at end when no more options
|
||||
|
@ -444,7 +444,7 @@ void OBJReader::parseTextureLine(const QByteArray& textureLine, QByteArray& file
|
|||
|
||||
std::tuple<bool, QByteArray> requestData(QUrl& url) {
|
||||
auto request = DependencyManager::get<ResourceManager>()->createResourceRequest(
|
||||
nullptr, url, true, -1, "(OBJReader) requestData");
|
||||
nullptr, url, true, -1, "(OBJSerializer) requestData");
|
||||
|
||||
if (!request) {
|
||||
return std::make_tuple(false, QByteArray());
|
||||
|
@ -488,7 +488,7 @@ QNetworkReply* request(QUrl& url, bool isTest) {
|
|||
}
|
||||
|
||||
|
||||
bool OBJReader::parseOBJGroup(OBJTokenizer& tokenizer, const QVariantHash& mapping, HFMModel& hfmModel,
|
||||
bool OBJSerializer::parseOBJGroup(OBJTokenizer& tokenizer, const QVariantHash& mapping, HFMModel& hfmModel,
|
||||
float& scaleGuess, bool combineParts) {
|
||||
FaceGroup faces;
|
||||
HFMMesh& mesh = hfmModel.meshes[0];
|
||||
|
@ -557,7 +557,7 @@ bool OBJReader::parseOBJGroup(OBJTokenizer& tokenizer, const QVariantHash& mappi
|
|||
currentMaterialName = nextName;
|
||||
}
|
||||
#ifdef WANT_DEBUG
|
||||
qCDebug(modelformat) << "OBJ Reader new current material:" << currentMaterialName;
|
||||
qCDebug(modelformat) << "OBJSerializer new current material:" << currentMaterialName;
|
||||
#endif
|
||||
}
|
||||
} else if (token == "v") {
|
||||
|
@ -652,7 +652,7 @@ done:
|
|||
}
|
||||
|
||||
|
||||
HFMModel::Pointer OBJReader::readOBJ(QByteArray& data, const QVariantHash& mapping, bool combineParts, const QUrl& url) {
|
||||
HFMModel::Pointer OBJSerializer::readOBJ(QByteArray& data, const QVariantHash& mapping, bool combineParts, const QUrl& url) {
|
||||
PROFILE_RANGE_EX(resource_parse, __FUNCTION__, 0xffff0000, nullptr);
|
||||
QBuffer buffer { &data };
|
||||
buffer.open(QIODevice::ReadOnly);
|
||||
|
@ -720,7 +720,7 @@ HFMModel::Pointer OBJReader::readOBJ(QByteArray& data, const QVariantHash& mappi
|
|||
QString groupMaterialName = face.materialName;
|
||||
if (groupMaterialName.isEmpty() && specifiesUV) {
|
||||
#ifdef WANT_DEBUG
|
||||
qCDebug(modelformat) << "OBJ Reader WARNING: " << url
|
||||
qCDebug(modelformat) << "OBJSerializer WARNING: " << url
|
||||
<< " needs a texture that isn't specified. Using default mechanism.";
|
||||
#endif
|
||||
groupMaterialName = SMART_DEFAULT_MATERIAL_NAME;
|
||||
|
@ -822,11 +822,11 @@ HFMModel::Pointer OBJReader::readOBJ(QByteArray& data, const QVariantHash& mappi
|
|||
}
|
||||
|
||||
// Build the single mesh.
|
||||
FBXReader::buildModelMesh(mesh, url.toString());
|
||||
FBXSerializer::buildModelMesh(mesh, url.toString());
|
||||
|
||||
// hfmDebugDump(hfmModel);
|
||||
} catch(const std::exception& e) {
|
||||
qCDebug(modelformat) << "OBJ reader fail: " << e.what();
|
||||
qCDebug(modelformat) << "OBJSerializer fail: " << e.what();
|
||||
}
|
||||
|
||||
QString queryPart = _url.query();
|
||||
|
@ -845,7 +845,7 @@ HFMModel::Pointer OBJReader::readOBJ(QByteArray& data, const QVariantHash& mappi
|
|||
preDefinedMaterial.diffuseColor = glm::vec3(1.0f);
|
||||
QVector<QByteArray> extensions = { "jpg", "jpeg", "png", "tga" };
|
||||
QByteArray base = basename.toUtf8(), textName = "";
|
||||
qCDebug(modelformat) << "OBJ Reader looking for default texture of" << url;
|
||||
qCDebug(modelformat) << "OBJSerializer looking for default texture of" << url;
|
||||
for (int i = 0; i < extensions.count(); i++) {
|
||||
QByteArray candidateString = base + extensions[i];
|
||||
if (isValidTexture(candidateString)) {
|
||||
|
@ -856,7 +856,7 @@ HFMModel::Pointer OBJReader::readOBJ(QByteArray& data, const QVariantHash& mappi
|
|||
|
||||
if (!textName.isEmpty()) {
|
||||
#ifdef WANT_DEBUG
|
||||
qCDebug(modelformat) << "OBJ Reader found a default texture: " << textName;
|
||||
qCDebug(modelformat) << "OBJSerializer found a default texture: " << textName;
|
||||
#endif
|
||||
preDefinedMaterial.diffuseTextureFilename = textName;
|
||||
}
|
||||
|
@ -866,7 +866,7 @@ HFMModel::Pointer OBJReader::readOBJ(QByteArray& data, const QVariantHash& mappi
|
|||
foreach (QString libraryName, librariesSeen.keys()) {
|
||||
// Throw away any path part of libraryName, and merge against original url.
|
||||
QUrl libraryUrl = _url.resolved(QUrl(libraryName).fileName());
|
||||
qCDebug(modelformat) << "OBJ Reader material library" << libraryName << "used in" << _url;
|
||||
qCDebug(modelformat) << "OBJSerializer material library" << libraryName << "used in" << _url;
|
||||
bool success;
|
||||
QByteArray data;
|
||||
std::tie<bool, QByteArray>(success, data) = requestData(libraryUrl);
|
||||
|
@ -875,7 +875,7 @@ HFMModel::Pointer OBJReader::readOBJ(QByteArray& data, const QVariantHash& mappi
|
|||
buffer.open(QIODevice::ReadOnly);
|
||||
parseMaterialLibrary(&buffer);
|
||||
} else {
|
||||
qCDebug(modelformat) << "OBJ Reader WARNING:" << libraryName << "did not answer";
|
||||
qCDebug(modelformat) << "OBJSerializer WARNING:" << libraryName << "did not answer";
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
#include <QtNetwork/QNetworkReply>
|
||||
#include "FBXReader.h"
|
||||
#include "FBXSerializer.h"
|
||||
|
||||
class OBJTokenizer {
|
||||
public:
|
||||
|
@ -75,7 +75,7 @@ public:
|
|||
OBJMaterial() : shininess(0.0f), opacity(1.0f), diffuseColor(0.9f), specularColor(0.9f), emissiveColor(0.0f), illuminationModel(-1) {}
|
||||
};
|
||||
|
||||
class OBJReader: public QObject { // QObject so we can make network requests.
|
||||
class OBJSerializer: public QObject { // QObject so we can make network requests.
|
||||
Q_OBJECT
|
||||
public:
|
||||
typedef QVector<OBJFace> FaceGroup;
|
|
@ -12,9 +12,9 @@
|
|||
#include "ModelCache.h"
|
||||
#include <Finally.h>
|
||||
#include <FSTReader.h>
|
||||
#include "FBXReader.h"
|
||||
#include "OBJReader.h"
|
||||
#include "GLTFReader.h"
|
||||
#include "FBXSerializer.h"
|
||||
#include "OBJSerializer.h"
|
||||
#include "GLTFSerializer.h"
|
||||
|
||||
#include <gpu/Batch.h>
|
||||
#include <gpu/Stream.h>
|
||||
|
@ -201,17 +201,17 @@ void GeometryReader::run() {
|
|||
throw QString("empty geometry, possibly due to an unsupported FBX version");
|
||||
}
|
||||
} else if (_url.path().toLower().endsWith(".obj")) {
|
||||
hfmModel = OBJReader().readOBJ(_data, _mapping, _combineParts, _url);
|
||||
hfmModel = OBJSerializer().readOBJ(_data, _mapping, _combineParts, _url);
|
||||
} else if (_url.path().toLower().endsWith(".obj.gz")) {
|
||||
QByteArray uncompressedData;
|
||||
if (gunzip(_data, uncompressedData)){
|
||||
hfmModel = OBJReader().readOBJ(uncompressedData, _mapping, _combineParts, _url);
|
||||
hfmModel = OBJSerializer().readOBJ(uncompressedData, _mapping, _combineParts, _url);
|
||||
} else {
|
||||
throw QString("failed to decompress .obj.gz");
|
||||
}
|
||||
|
||||
} else if (_url.path().toLower().endsWith(".gltf")) {
|
||||
std::shared_ptr<GLTFReader> glreader = std::make_shared<GLTFReader>();
|
||||
std::shared_ptr<GLTFSerializer> glreader = std::make_shared<GLTFSerializer>();
|
||||
hfmModel.reset(glreader->readGLTF(_data, _mapping, _url));
|
||||
if (hfmModel->meshes.size() == 0 && hfmModel->joints.size() == 0) {
|
||||
throw QString("empty geometry, possibly due to an unsupported GLTF version");
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include <graphics/Material.h>
|
||||
#include <graphics/Asset.h>
|
||||
|
||||
#include "FBXReader.h"
|
||||
#include "FBXSerializer.h"
|
||||
#include "TextureCache.h"
|
||||
|
||||
// Alias instead of derive to avoid copying
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
#include <QtCore/QFile>
|
||||
|
||||
#include <FBXReader.h>
|
||||
#include <FBXSerializer.h>
|
||||
|
||||
struct MyVertex {
|
||||
vec3 position;
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "SkeletonDumpApp.h"
|
||||
#include <QCommandLineParser>
|
||||
#include <QFile>
|
||||
#include <FBXReader.h>
|
||||
#include <FBXSerializer.h>
|
||||
#include <AnimSkeleton.h>
|
||||
|
||||
SkeletonDumpApp::SkeletonDumpApp(int argc, char* argv[]) : QCoreApplication(argc, argv) {
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#include <NumericalConstants.h>
|
||||
|
||||
|
||||
// FBXReader jumbles the order of the meshes by reading them back out of a hashtable. This will put
|
||||
// FBXSerializer jumbles the order of the meshes by reading them back out of a hashtable. This will put
|
||||
// them back in the order in which they appeared in the file.
|
||||
bool HFMModelLessThan(const HFMMesh& e1, const HFMMesh& e2) {
|
||||
return e1.meshIndex < e2.meshIndex;
|
||||
|
@ -44,7 +44,7 @@ bool vhacd::VHACDUtil::loadFBX(const QString filename, HFMModel& result) {
|
|||
HFMModel::Pointer hfmModel;
|
||||
if (filename.toLower().endsWith(".obj")) {
|
||||
bool combineParts = false;
|
||||
hfmModel = OBJReader().readOBJ(fbxContents, QVariantHash(), combineParts);
|
||||
hfmModel = OBJSerializer().readOBJ(fbxContents, QVariantHash(), combineParts);
|
||||
} else if (filename.toLower().endsWith(".fbx")) {
|
||||
hfmModel.reset(readFBX(fbxContents, QVariantHash(), filename));
|
||||
} else {
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
#include <vector>
|
||||
#include <chrono> //c++11 feature
|
||||
#include <QFile>
|
||||
#include <FBXReader.h>
|
||||
#include <OBJReader.h>
|
||||
#include <FBXSerializer.h>
|
||||
#include <OBJSerializer.h>
|
||||
#include <VHACD.h>
|
||||
|
||||
namespace vhacd {
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
#include <QCoreApplication>
|
||||
|
||||
#include <FBXReader.h>
|
||||
#include <FBXSerializer.h>
|
||||
|
||||
const int VHACD_RETURN_CODE_FAILURE_TO_READ = 1;
|
||||
const int VHACD_RETURN_CODE_FAILURE_TO_WRITE = 2;
|
||||
|
|
Loading…
Reference in a new issue