mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
it's working!
This commit is contained in:
parent
189ccfde4a
commit
f75a3e1a72
3 changed files with 42 additions and 30 deletions
|
@ -25,35 +25,51 @@ void ParseMaterialMappingTask::run(const baker::BakeContextPointer& context, con
|
|||
} else {
|
||||
auto mappingKeys = materialMap.keys();
|
||||
for (auto mapping : mappingKeys) {
|
||||
auto mappingValue = materialMap[mapping].toObject();
|
||||
auto mappingJSON = materialMap[mapping];
|
||||
if (mappingJSON.isObject()) {
|
||||
auto mappingValue = mappingJSON.toObject();
|
||||
|
||||
// Old subsurface scattering mapping
|
||||
{
|
||||
auto scatteringIter = mappingValue.find("scattering");
|
||||
auto scatteringMapIter = mappingValue.find("scatteringMap");
|
||||
if (scatteringIter != mappingValue.end() || scatteringMapIter != mappingValue.end()) {
|
||||
std::shared_ptr<NetworkMaterial> material = std::make_shared<NetworkMaterial>();
|
||||
// Old subsurface scattering mapping
|
||||
{
|
||||
auto scatteringIter = mappingValue.find("scattering");
|
||||
auto scatteringMapIter = mappingValue.find("scatteringMap");
|
||||
if (scatteringIter != mappingValue.end() || scatteringMapIter != mappingValue.end()) {
|
||||
std::shared_ptr<NetworkMaterial> material = std::make_shared<NetworkMaterial>();
|
||||
|
||||
if (scatteringIter != mappingValue.end()) {
|
||||
float scattering = (float)scatteringIter.value().toDouble();
|
||||
material->setScattering(scattering);
|
||||
if (scatteringIter != mappingValue.end()) {
|
||||
float scattering = (float)scatteringIter.value().toDouble();
|
||||
material->setScattering(scattering);
|
||||
}
|
||||
|
||||
if (scatteringMapIter != mappingValue.end()) {
|
||||
QString scatteringMap = scatteringMapIter.value().toString();
|
||||
material->setScatteringMap(scatteringMap);
|
||||
}
|
||||
|
||||
material->setDefaultFallthrough(true);
|
||||
|
||||
NetworkMaterialResourcePointer materialResource = NetworkMaterialResourcePointer(new NetworkMaterialResource(), [](NetworkMaterialResource* ptr) { ptr->deleteLater(); });
|
||||
materialResource->moveToThread(qApp->thread());
|
||||
materialResource->parsedMaterials.names.push_back("scattering");
|
||||
materialResource->parsedMaterials.networkMaterials["scattering"] = material;
|
||||
|
||||
materialMapping.push_back(std::pair<std::string, NetworkMaterialResourcePointer>("mat::" + mapping.toStdString(), materialResource));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (scatteringMapIter != mappingValue.end()) {
|
||||
QString scatteringMap = scatteringMapIter.value().toString();
|
||||
material->setScatteringMap(scatteringMap);
|
||||
}
|
||||
|
||||
material->setDefaultFallthrough(true);
|
||||
|
||||
// Material JSON description
|
||||
{
|
||||
NetworkMaterialResourcePointer materialResource = NetworkMaterialResourcePointer(new NetworkMaterialResource(), [](NetworkMaterialResource* ptr) { ptr->deleteLater(); });
|
||||
materialResource->moveToThread(qApp->thread());
|
||||
materialResource->parsedMaterials.names.push_back("scattering");
|
||||
materialResource->parsedMaterials.networkMaterials["scattering"] = material;
|
||||
|
||||
materialMapping.push_back(std::pair<std::string, NetworkMaterialResourcePointer>("mat::" + mapping.toStdString(), materialResource));
|
||||
continue;
|
||||
// TODO: add baseURL to allow FSTs to reference relative files next to them
|
||||
materialResource->parsedMaterials = NetworkMaterialResource::parseJSONMaterials(QJsonDocument(mappingValue), QUrl());
|
||||
materialMapping.push_back(std::pair<std::string, NetworkMaterialResourcePointer>(mapping.toStdString(), materialResource));
|
||||
}
|
||||
|
||||
} else if (mappingJSON.isString()) {
|
||||
auto mappingValue = mappingJSON.toString();
|
||||
materialMapping.push_back(std::pair<std::string, NetworkMaterialResourcePointer>(mapping.toStdString(), MaterialCache::instance().getMaterial(mappingValue)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,7 +64,6 @@ void CauterizedModel::createRenderItemSet() {
|
|||
_modelMeshRenderItems.clear();
|
||||
_modelMeshMaterialNames.clear();
|
||||
_modelMeshRenderItemShapes.clear();
|
||||
_priorityMap.clear();
|
||||
|
||||
Transform transform;
|
||||
transform.setTranslation(_translation);
|
||||
|
@ -98,7 +97,6 @@ void CauterizedModel::createRenderItemSet() {
|
|||
}
|
||||
}
|
||||
_blendshapeOffsetsInitialized = true;
|
||||
applyMaterialMapping();
|
||||
} else {
|
||||
Model::createRenderItemSet();
|
||||
}
|
||||
|
|
|
@ -956,6 +956,7 @@ bool Model::addToScene(const render::ScenePointer& scene,
|
|||
}
|
||||
|
||||
if (somethingAdded) {
|
||||
applyMaterialMapping();
|
||||
_addedToScene = true;
|
||||
updateRenderItems();
|
||||
_needsFixupInScene = false;
|
||||
|
@ -973,6 +974,7 @@ void Model::removeFromScene(const render::ScenePointer& scene, render::Transacti
|
|||
_modelMeshRenderItems.clear();
|
||||
_modelMeshMaterialNames.clear();
|
||||
_modelMeshRenderItemShapes.clear();
|
||||
_priorityMap.clear();
|
||||
|
||||
_blendshapeOffsets.clear();
|
||||
_blendshapeOffsetsInitialized = false;
|
||||
|
@ -1434,7 +1436,6 @@ void Model::createRenderItemSet() {
|
|||
_modelMeshRenderItems.clear();
|
||||
_modelMeshMaterialNames.clear();
|
||||
_modelMeshRenderItemShapes.clear();
|
||||
_priorityMap.clear();
|
||||
|
||||
Transform transform;
|
||||
transform.setTranslation(_translation);
|
||||
|
@ -1466,7 +1467,6 @@ void Model::createRenderItemSet() {
|
|||
}
|
||||
}
|
||||
_blendshapeOffsetsInitialized = true;
|
||||
applyMaterialMapping();
|
||||
}
|
||||
|
||||
bool Model::isRenderable() const {
|
||||
|
@ -1535,14 +1535,12 @@ void Model::applyMaterialMapping() {
|
|||
}
|
||||
|
||||
auto materialLoaded = [this, networkMaterialResource, shapeIDs, renderItemsKey, primitiveMode, useDualQuaternionSkinning]() {
|
||||
qDebug() << "boop2" << networkMaterialResource->isFailed() << networkMaterialResource->parsedMaterials.names.size();
|
||||
if (networkMaterialResource->isFailed() || networkMaterialResource->parsedMaterials.names.size() > 0) {
|
||||
if (networkMaterialResource->isFailed() || networkMaterialResource->parsedMaterials.names.size() == 0) {
|
||||
return;
|
||||
}
|
||||
render::Transaction transaction;
|
||||
auto networkMaterial = networkMaterialResource->parsedMaterials.networkMaterials[networkMaterialResource->parsedMaterials.names[0]];
|
||||
for (auto shapeID : shapeIDs) {
|
||||
qDebug() << "boop3" << shapeID << _modelMeshRenderItemIDs.size();
|
||||
if (shapeID < _modelMeshRenderItemIDs.size()) {
|
||||
auto itemID = _modelMeshRenderItemIDs[shapeID];
|
||||
auto meshIndex = _modelMeshRenderItemShapes[shapeID].meshIndex;
|
||||
|
@ -1559,7 +1557,7 @@ void Model::applyMaterialMapping() {
|
|||
}
|
||||
AbstractViewStateInterface::instance()->getMain3DScene()->enqueueTransaction(transaction);
|
||||
};
|
||||
qDebug() << "boop" << networkMaterialResource->isLoaded();
|
||||
|
||||
if (networkMaterialResource->isLoaded()) {
|
||||
materialLoaded();
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue