mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 05:37:17 +02:00
Model: fix for collision mesh rendering
This commit is contained in:
parent
c671fe7966
commit
f5a86666a1
1 changed files with 11 additions and 7 deletions
|
@ -135,29 +135,33 @@ void Model::enqueueLocationChange() {
|
||||||
modelTransform.setTranslation(_translation);
|
modelTransform.setTranslation(_translation);
|
||||||
modelTransform.setRotation(_rotation);
|
modelTransform.setRotation(_rotation);
|
||||||
|
|
||||||
Transform offset;
|
Transform modelMeshOffset;
|
||||||
if (_geometry && _geometry->isLoaded()) {
|
if (_geometry && _geometry->isLoaded()) {
|
||||||
offset = Transform(_rig->getGeometryToRigTransform());
|
modelMeshOffset = Transform(_rig->getGeometryToRigTransform());
|
||||||
} else {
|
} else {
|
||||||
offset.postTranslate(_offset);
|
modelMeshOffset.postTranslate(_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Transform collisionMeshOffset;
|
||||||
|
collisionMeshOffset.postTranslate(_offset);
|
||||||
|
|
||||||
|
|
||||||
render::PendingChanges pendingChanges;
|
render::PendingChanges pendingChanges;
|
||||||
foreach (auto itemID, _modelMeshRenderItems.keys()) {
|
foreach (auto itemID, _modelMeshRenderItems.keys()) {
|
||||||
pendingChanges.updateItem<ModelMeshPartPayload>(itemID, [modelTransform, offset](ModelMeshPartPayload& data) {
|
pendingChanges.updateItem<ModelMeshPartPayload>(itemID, [modelTransform, modelMeshOffset](ModelMeshPartPayload& data) {
|
||||||
|
|
||||||
data._model->updateClusterMatrices(modelTransform.getTranslation(), modelTransform.getRotation());
|
data._model->updateClusterMatrices(modelTransform.getTranslation(), modelTransform.getRotation());
|
||||||
const Model::MeshState& state = data._model->_meshStates.at(data._meshIndex);
|
const Model::MeshState& state = data._model->_meshStates.at(data._meshIndex);
|
||||||
size_t numClusterMatrices = data._model->getGeometry()->getFBXGeometry().meshes.at(data._meshIndex).clusters.size();
|
size_t numClusterMatrices = data._model->getGeometry()->getFBXGeometry().meshes.at(data._meshIndex).clusters.size();
|
||||||
|
|
||||||
data.updateTransformForSkinnedMesh(modelTransform, offset, &state.clusterMatrices[0], numClusterMatrices);
|
data.updateTransformForSkinnedMesh(modelTransform, modelMeshOffset, &state.clusterMatrices[0], numClusterMatrices);
|
||||||
data.notifyLocationChanged();
|
data.notifyLocationChanged();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (auto itemID, _collisionRenderItems.keys()) {
|
foreach (auto itemID, _collisionRenderItems.keys()) {
|
||||||
pendingChanges.updateItem<MeshPartPayload>(itemID, [modelTransform, offset](MeshPartPayload& data) {
|
pendingChanges.updateItem<MeshPartPayload>(itemID, [modelTransform, collisionMeshOffset](MeshPartPayload& data) {
|
||||||
data.updateTransform(modelTransform, offset);
|
data.updateTransform(modelTransform, collisionMeshOffset);
|
||||||
data.notifyLocationChanged();
|
data.notifyLocationChanged();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue