mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 10:57:25 +02:00
the root node isn't the first onegit add ../.git add ../.
This commit is contained in:
parent
b7e1798d1b
commit
b24b7fed3d
3 changed files with 12 additions and 12 deletions
|
@ -1486,8 +1486,8 @@ HFMModel* FBXSerializer::extractHFMModel(const QVariantHash& mapping, const QStr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we don't have a skinned joint, parent to the model itself
|
// the last cluster is the root cluster
|
||||||
if (extracted.mesh.clusters.isEmpty()) {
|
{
|
||||||
HFMCluster cluster;
|
HFMCluster cluster;
|
||||||
cluster.jointIndex = modelIDs.indexOf(modelID);
|
cluster.jointIndex = modelIDs.indexOf(modelID);
|
||||||
if (cluster.jointIndex == -1) {
|
if (cluster.jointIndex == -1) {
|
||||||
|
@ -1498,13 +1498,11 @@ HFMModel* FBXSerializer::extractHFMModel(const QVariantHash& mapping, const QStr
|
||||||
}
|
}
|
||||||
|
|
||||||
// whether we're skinned depends on how many clusters are attached
|
// whether we're skinned depends on how many clusters are attached
|
||||||
const HFMCluster& firstHFMCluster = extracted.mesh.clusters.at(0);
|
|
||||||
glm::mat4 inverseModelTransform = glm::inverse(modelTransform);
|
|
||||||
if (clusterIDs.size() > 1) {
|
if (clusterIDs.size() > 1) {
|
||||||
// this is a multi-mesh joint
|
// this is a multi-mesh joint
|
||||||
const int WEIGHTS_PER_VERTEX = 4;
|
const int WEIGHTS_PER_VERTEX = 4;
|
||||||
int numClusterIndices = extracted.mesh.vertices.size() * WEIGHTS_PER_VERTEX;
|
int numClusterIndices = extracted.mesh.vertices.size() * WEIGHTS_PER_VERTEX;
|
||||||
extracted.mesh.clusterIndices.fill(0, numClusterIndices);
|
extracted.mesh.clusterIndices.fill(extracted.mesh.clusters.size() - 1, numClusterIndices);
|
||||||
QVector<float> weightAccumulators;
|
QVector<float> weightAccumulators;
|
||||||
weightAccumulators.fill(0.0f, numClusterIndices);
|
weightAccumulators.fill(0.0f, numClusterIndices);
|
||||||
|
|
||||||
|
@ -1526,6 +1524,7 @@ HFMModel* FBXSerializer::extractHFMModel(const QVariantHash& mapping, const QStr
|
||||||
int newIndex = it.value();
|
int newIndex = it.value();
|
||||||
|
|
||||||
// remember vertices with at least 1/4 weight
|
// remember vertices with at least 1/4 weight
|
||||||
|
// FIXME: vertices with no weightpainting won't get recorded here
|
||||||
const float EXPANSION_WEIGHT_THRESHOLD = 0.25f;
|
const float EXPANSION_WEIGHT_THRESHOLD = 0.25f;
|
||||||
if (weight >= EXPANSION_WEIGHT_THRESHOLD) {
|
if (weight >= EXPANSION_WEIGHT_THRESHOLD) {
|
||||||
// transform to joint-frame and save for later
|
// transform to joint-frame and save for later
|
||||||
|
@ -1582,7 +1581,8 @@ HFMModel* FBXSerializer::extractHFMModel(const QVariantHash& mapping, const QStr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// this is a single-mesh joint
|
// this is a single-joint mesh
|
||||||
|
const HFMCluster& firstHFMCluster = extracted.mesh.clusters.at(0);
|
||||||
int jointIndex = firstHFMCluster.jointIndex;
|
int jointIndex = firstHFMCluster.jointIndex;
|
||||||
HFMJoint& joint = hfmModel.joints[jointIndex];
|
HFMJoint& joint = hfmModel.joints[jointIndex];
|
||||||
|
|
||||||
|
|
|
@ -245,7 +245,7 @@ void CauterizedModel::updateRenderItems() {
|
||||||
|
|
||||||
Transform renderTransform = modelTransform;
|
Transform renderTransform = modelTransform;
|
||||||
if (useDualQuaternionSkinning) {
|
if (useDualQuaternionSkinning) {
|
||||||
if (meshState.clusterDualQuaternions.size() == 1) {
|
if (meshState.clusterDualQuaternions.size() <= 2) {
|
||||||
const auto& dq = meshState.clusterDualQuaternions[0];
|
const auto& dq = meshState.clusterDualQuaternions[0];
|
||||||
Transform transform(dq.getRotation(),
|
Transform transform(dq.getRotation(),
|
||||||
dq.getScale(),
|
dq.getScale(),
|
||||||
|
@ -253,7 +253,7 @@ void CauterizedModel::updateRenderItems() {
|
||||||
renderTransform = modelTransform.worldTransform(transform);
|
renderTransform = modelTransform.worldTransform(transform);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (meshState.clusterMatrices.size() == 1) {
|
if (meshState.clusterMatrices.size() <= 2) {
|
||||||
renderTransform = modelTransform.worldTransform(Transform(meshState.clusterMatrices[0]));
|
renderTransform = modelTransform.worldTransform(Transform(meshState.clusterMatrices[0]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -261,7 +261,7 @@ void CauterizedModel::updateRenderItems() {
|
||||||
|
|
||||||
renderTransform = modelTransform;
|
renderTransform = modelTransform;
|
||||||
if (useDualQuaternionSkinning) {
|
if (useDualQuaternionSkinning) {
|
||||||
if (cauterizedMeshState.clusterDualQuaternions.size() == 1) {
|
if (cauterizedMeshState.clusterDualQuaternions.size() <= 2) {
|
||||||
const auto& dq = cauterizedMeshState.clusterDualQuaternions[0];
|
const auto& dq = cauterizedMeshState.clusterDualQuaternions[0];
|
||||||
Transform transform(dq.getRotation(),
|
Transform transform(dq.getRotation(),
|
||||||
dq.getScale(),
|
dq.getScale(),
|
||||||
|
@ -269,7 +269,7 @@ void CauterizedModel::updateRenderItems() {
|
||||||
renderTransform = modelTransform.worldTransform(Transform(transform));
|
renderTransform = modelTransform.worldTransform(Transform(transform));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (cauterizedMeshState.clusterMatrices.size() == 1) {
|
if (cauterizedMeshState.clusterMatrices.size() <= 2) {
|
||||||
renderTransform = modelTransform.worldTransform(Transform(cauterizedMeshState.clusterMatrices[0]));
|
renderTransform = modelTransform.worldTransform(Transform(cauterizedMeshState.clusterMatrices[0]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -247,7 +247,7 @@ void Model::updateRenderItems() {
|
||||||
Transform renderTransform = modelTransform;
|
Transform renderTransform = modelTransform;
|
||||||
|
|
||||||
if (useDualQuaternionSkinning) {
|
if (useDualQuaternionSkinning) {
|
||||||
if (meshState.clusterDualQuaternions.size() == 1) {
|
if (meshState.clusterDualQuaternions.size() <= 2) {
|
||||||
const auto& dq = meshState.clusterDualQuaternions[0];
|
const auto& dq = meshState.clusterDualQuaternions[0];
|
||||||
Transform transform(dq.getRotation(),
|
Transform transform(dq.getRotation(),
|
||||||
dq.getScale(),
|
dq.getScale(),
|
||||||
|
@ -255,7 +255,7 @@ void Model::updateRenderItems() {
|
||||||
renderTransform = modelTransform.worldTransform(Transform(transform));
|
renderTransform = modelTransform.worldTransform(Transform(transform));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (meshState.clusterMatrices.size() == 1) {
|
if (meshState.clusterMatrices.size() <= 2) {
|
||||||
renderTransform = modelTransform.worldTransform(Transform(meshState.clusterMatrices[0]));
|
renderTransform = modelTransform.worldTransform(Transform(meshState.clusterMatrices[0]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue