History

Merge branch 'master' into tony/js-avatar-default-pose

Anthony J. Thibault committed 10 years ago

Commit 3f0cdb32 parents 020836f 205bc1b182 files · +2709 −1501Browse files

Showing the changes to libraries/render-utils/src/Model.cpp (1 of 182 files). Show all

Unified · Split

libraries/render-utils/src/Model.cpp+58−22
@@ -90,7 +90,7 @@ void Model::setScale(const glm::vec3& scale) { · 89 unmodified lines
9090 _scaledToFit = false;
9191 }
9292
93−const float METERS_PER_MILLIMETER = 0.01f;
93+const float METERS_PER_MILLIMETER = 0.01f;
9494
9595 void Model::setScaleInternal(const glm::vec3& scale) {
9696 if (glm::distance(_scale, scale) > METERS_PER_MILLIMETER) {
@@ -110,11 +110,19 @@ void Model::setOffset(const glm::vec3& offset) { · 13 unmodified lines
110110 void Model::enqueueLocationChange() {
111111 render::ScenePointer scene = AbstractViewStateInterface::instance()->getMain3DScene();
112112
113+ Transform transform;
114+ transform.setTranslation(_translation);
115+ transform.setRotation(_rotation);
116+
117+ Transform offset;
118+ offset.setScale(_scale);
119+ offset.postTranslate(_offset);
120+
113121 render::PendingChanges pendingChanges;
114122 foreach (auto itemID, _renderItems.keys()) {
115− pendingChanges.updateItem<MeshPartPayload>(itemID, [=](MeshPartPayload& data) {
116− data.updateModelLocation(_translation, _rotation);
117− data.model->_needsUpdateClusterMatrices = true;
123+ pendingChanges.updateItem<MeshPartPayload>(itemID, [transform, offset](MeshPartPayload& data) {
124+ data.updateTransform(transform, offset);
125+ data.notifyLocationChanged();
118126 });
119127 }
120128
@@ -495,11 +503,10 @@ bool Model::addToScene(std::shared_ptr<render::Scene> scene, render::PendingChan · 374 unmodified lines
495503
496504 foreach (auto renderItem, _renderItemsSet) {
497505 auto item = scene->allocateID();
498− auto renderData = MeshPartPayload::Pointer(renderItem);
499− auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData);
506+ auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderItem);
500507 pendingChanges.resetItem(item, renderPayload);
501− pendingChanges.updateItem<MeshPartPayload>(item, [&](MeshPartPayload& data) {
502− data.model->_needsUpdateClusterMatrices = true;
508+ pendingChanges.updateItem<MeshPartPayload>(item, [](MeshPartPayload& data) {
509+ data.notifyLocationChanged();
503510 });
504511 _renderItems.insert(item, renderPayload);
505512 somethingAdded = true;
@@ -523,12 +530,11 @@ bool Model::addToScene(std::shared_ptr<render::Scene> scene, · 17 unmodified lines
523530
524531 foreach (auto renderItem, _renderItemsSet) {
525532 auto item = scene->allocateID();
526− auto renderData = MeshPartPayload::Pointer(renderItem);
527− auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData);
533+ auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderItem);
528534 renderPayload->addStatusGetters(statusGetters);
529535 pendingChanges.resetItem(item, renderPayload);
530− pendingChanges.updateItem<MeshPartPayload>(item, [&](MeshPartPayload& data) {
531− data.model->_needsUpdateClusterMatrices = true;
536+ pendingChanges.updateItem<MeshPartPayload>(item, [](MeshPartPayload& data) {
537+ data.notifyLocationChanged();
532538 });
533539 _renderItems.insert(item, renderPayload);
534540 somethingAdded = true;
@@ -1135,8 +1141,14 @@ AABox Model::getPartBounds(int meshIndex, int partIndex, glm::vec3 modelPosition · 600 unmodified lines
11351141
11361142 void Model::segregateMeshGroups() {
11371143 QSharedPointer<NetworkGeometry> networkGeometry;
1138− if (_showCollisionHull && _collisionGeometry && _collisionGeometry->isLoaded()) {
1139− networkGeometry = _collisionGeometry;
1144+ bool showingCollisionHull = false;
1145+ if (_showCollisionHull && _collisionGeometry) {
1146+ if (_collisionGeometry->isLoaded()) {
1147+ networkGeometry = _collisionGeometry;
1148+ showingCollisionHull = true;
1149+ } else {
1150+ return;
1151+ }
11401152 } else {
11411153 networkGeometry = _geometry;
11421154 }
@@ -1144,8 +1156,10 @@ void Model::segregateMeshGroups() { · 1 unmodified line
11441156 const std::vector<std::unique_ptr<NetworkMesh>>& networkMeshes = networkGeometry->getMeshes();
11451157
11461158 // all of our mesh vectors must match in size
1147− if ((int)networkMeshes.size() != geometry.meshes.size() ||
1148− geometry.meshes.size() != _meshStates.size()) {
1159+ auto geoMeshesSize = geometry.meshes.size();
1160+ if ((int)networkMeshes.size() != geoMeshesSize ||
1161+ // geometry.meshes.size() != _meshStates.size()) {
1162+ geoMeshesSize > _meshStates.size()) {
11491163 qDebug() << "WARNING!!!! Mesh Sizes don't match! We will not segregate mesh groups yet.";
11501164 return;
11511165 }
@@ -1155,15 +1169,30 @@ void Model::segregateMeshGroups() { · 3 unmodified lines
11551169
11561170 _renderItemsSet.clear();
11571171
1172+ Transform transform;
1173+ transform.setTranslation(_translation);
1174+ transform.setRotation(_rotation);
1175+
1176+ Transform offset;
1177+ offset.setScale(_scale);
1178+ offset.postTranslate(_offset);
1179+
11581180 // Run through all of the meshes, and place them into their segregated, but unsorted buckets
11591181 int shapeID = 0;
11601182 for (int i = 0; i < (int)networkMeshes.size(); i++) {
11611183 const FBXMesh& mesh = geometry.meshes.at(i);
1184+ const NetworkMesh& networkMesh = *(networkMeshes.at(i).get());
11621185
11631186 // Create the render payloads
11641187 int totalParts = mesh.parts.size();
11651188 for (int partIndex = 0; partIndex < totalParts; partIndex++) {
1166− _renderItemsSet << std::make_shared<MeshPartPayload>(this, i, partIndex, shapeID, _translation, _rotation);
1189+ if (showingCollisionHull) {
1190+ _renderItemsSet << std::make_shared<MeshPartPayload>(networkMesh._mesh, partIndex, ModelRender::getCollisionHullMaterial(), transform, offset);
1191+
1192+ } else {
1193+ _renderItemsSet << std::make_shared<ModelMeshPartPayload>(this, i, partIndex, shapeID, transform, offset);
1194+ }
1195+
11671196 shapeID++;
11681197 }
11691198 }
@@ -1176,15 +1205,22 @@ bool Model::initWhenReady(render::ScenePointer scene) { · 6 unmodified lines
11761205
11771206 render::PendingChanges pendingChanges;
11781207
1208+ Transform transform;
1209+ transform.setTranslation(_translation);
1210+ transform.setRotation(_rotation);
1211+
1212+ Transform offset;
1213+ offset.setScale(_scale);
1214+ offset.postTranslate(_offset);
1215+
11791216 foreach (auto renderItem, _renderItemsSet) {
11801217 auto item = scene->allocateID();
1181− auto renderData = MeshPartPayload::Pointer(renderItem);
1182− auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData);
1218+ auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderItem);
11831219 _renderItems.insert(item, renderPayload);
11841220 pendingChanges.resetItem(item, renderPayload);
1185− pendingChanges.updateItem<MeshPartPayload>(item, [&](MeshPartPayload& data) {
1186− data.updateModelLocation(_translation, _rotation);
1187− data.model->_needsUpdateClusterMatrices = true;
1221+ pendingChanges.updateItem<MeshPartPayload>(item, [transform,offset](MeshPartPayload& data) {
1222+ data.updateTransform(transform, offset);
1223+ data.notifyLocationChanged();
11881224 });
11891225 }
11901226 scene->enqueuePendingChanges(pendingChanges);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t