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
90 _scaledToFit = false;90 _scaledToFit = false;
91}91}
92 92
93const float METERS_PER_MILLIMETER = 0.01f;93const float METERS_PER_MILLIMETER = 0.01f;
94 94
95void Model::setScaleInternal(const glm::vec3& scale) {95void Model::setScaleInternal(const glm::vec3& scale) {
96 if (glm::distance(_scale, scale) > METERS_PER_MILLIMETER) {96 if (glm::distance(_scale, scale) > METERS_PER_MILLIMETER) {
@@ -110,11 +110,19 @@ void Model::setOffset(const glm::vec3& offset) { · 13 unmodified lines
110void Model::enqueueLocationChange() {110void Model::enqueueLocationChange() {
111 render::ScenePointer scene = AbstractViewStateInterface::instance()->getMain3DScene();111 render::ScenePointer scene = AbstractViewStateInterface::instance()->getMain3DScene();
112 112
113 Transform transform;
114 transform.setTranslation(_translation);
115 transform.setRotation(_rotation);
116
117 Transform offset;
118 offset.setScale(_scale);
119 offset.postTranslate(_offset);
120
113 render::PendingChanges pendingChanges;121 render::PendingChanges pendingChanges;
114 foreach (auto itemID, _renderItems.keys()) {122 foreach (auto itemID, _renderItems.keys()) {
115 pendingChanges.updateItem<MeshPartPayload>(itemID, [=](MeshPartPayload& data) {123 pendingChanges.updateItem<MeshPartPayload>(itemID, [transform, offset](MeshPartPayload& data) {
116 data.updateModelLocation(_translation, _rotation);124 data.updateTransform(transform, offset);
117 data.model->_needsUpdateClusterMatrices = true;125 data.notifyLocationChanged();
118 });126 });
119 }127 }
120 128
@@ -495,11 +503,10 @@ bool Model::addToScene(std::shared_ptr<render::Scene> scene, render::PendingChan · 374 unmodified lines
495 503
496 foreach (auto renderItem, _renderItemsSet) {504 foreach (auto renderItem, _renderItemsSet) {
497 auto item = scene->allocateID();505 auto item = scene->allocateID();
498 auto renderData = MeshPartPayload::Pointer(renderItem);506 auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderItem);
499 auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData);
500 pendingChanges.resetItem(item, renderPayload);507 pendingChanges.resetItem(item, renderPayload);
501 pendingChanges.updateItem<MeshPartPayload>(item, [&](MeshPartPayload& data) {508 pendingChanges.updateItem<MeshPartPayload>(item, [](MeshPartPayload& data) {
502 data.model->_needsUpdateClusterMatrices = true;509 data.notifyLocationChanged();
503 });510 });
504 _renderItems.insert(item, renderPayload);511 _renderItems.insert(item, renderPayload);
505 somethingAdded = true;512 somethingAdded = true;
@@ -523,12 +530,11 @@ bool Model::addToScene(std::shared_ptr<render::Scene> scene, · 17 unmodified lines
523 530
524 foreach (auto renderItem, _renderItemsSet) {531 foreach (auto renderItem, _renderItemsSet) {
525 auto item = scene->allocateID();532 auto item = scene->allocateID();
526 auto renderData = MeshPartPayload::Pointer(renderItem);533 auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderItem);
527 auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData);
528 renderPayload->addStatusGetters(statusGetters);534 renderPayload->addStatusGetters(statusGetters);
529 pendingChanges.resetItem(item, renderPayload);535 pendingChanges.resetItem(item, renderPayload);
530 pendingChanges.updateItem<MeshPartPayload>(item, [&](MeshPartPayload& data) {536 pendingChanges.updateItem<MeshPartPayload>(item, [](MeshPartPayload& data) {
531 data.model->_needsUpdateClusterMatrices = true;537 data.notifyLocationChanged();
532 });538 });
533 _renderItems.insert(item, renderPayload);539 _renderItems.insert(item, renderPayload);
534 somethingAdded = true;540 somethingAdded = true;
@@ -1135,8 +1141,14 @@ AABox Model::getPartBounds(int meshIndex, int partIndex, glm::vec3 modelPosition · 600 unmodified lines
1135 1141
1136void Model::segregateMeshGroups() {1142void Model::segregateMeshGroups() {
1137 QSharedPointer<NetworkGeometry> networkGeometry;1143 QSharedPointer<NetworkGeometry> networkGeometry;
1138 if (_showCollisionHull && _collisionGeometry && _collisionGeometry->isLoaded()) {1144 bool showingCollisionHull = false;
1139 networkGeometry = _collisionGeometry;1145 if (_showCollisionHull && _collisionGeometry) {
1146 if (_collisionGeometry->isLoaded()) {
1147 networkGeometry = _collisionGeometry;
1148 showingCollisionHull = true;
1149 } else {
1150 return;
1151 }
1140 } else {1152 } else {
1141 networkGeometry = _geometry;1153 networkGeometry = _geometry;
1142 }1154 }
@@ -1144,8 +1156,10 @@ void Model::segregateMeshGroups() { · 1 unmodified line
1144 const std::vector<std::unique_ptr<NetworkMesh>>& networkMeshes = networkGeometry->getMeshes();1156 const std::vector<std::unique_ptr<NetworkMesh>>& networkMeshes = networkGeometry->getMeshes();
1145 1157
1146 // all of our mesh vectors must match in size1158 // all of our mesh vectors must match in size
1147 if ((int)networkMeshes.size() != geometry.meshes.size() ||1159 auto geoMeshesSize = geometry.meshes.size();
1148 geometry.meshes.size() != _meshStates.size()) {1160 if ((int)networkMeshes.size() != geoMeshesSize ||
1161 // geometry.meshes.size() != _meshStates.size()) {
1162 geoMeshesSize > _meshStates.size()) {
1149 qDebug() << "WARNING!!!! Mesh Sizes don't match! We will not segregate mesh groups yet.";1163 qDebug() << "WARNING!!!! Mesh Sizes don't match! We will not segregate mesh groups yet.";
1150 return;1164 return;
1151 }1165 }
@@ -1155,15 +1169,30 @@ void Model::segregateMeshGroups() { · 3 unmodified lines
1155 1169
1156 _renderItemsSet.clear();1170 _renderItemsSet.clear();
1157 1171
1172 Transform transform;
1173 transform.setTranslation(_translation);
1174 transform.setRotation(_rotation);
1175
1176 Transform offset;
1177 offset.setScale(_scale);
1178 offset.postTranslate(_offset);
1179
1158 // Run through all of the meshes, and place them into their segregated, but unsorted buckets1180 // Run through all of the meshes, and place them into their segregated, but unsorted buckets
1159 int shapeID = 0;1181 int shapeID = 0;
1160 for (int i = 0; i < (int)networkMeshes.size(); i++) {1182 for (int i = 0; i < (int)networkMeshes.size(); i++) {
1161 const FBXMesh& mesh = geometry.meshes.at(i);1183 const FBXMesh& mesh = geometry.meshes.at(i);
1184 const NetworkMesh& networkMesh = *(networkMeshes.at(i).get());
1162 1185
1163 // Create the render payloads1186 // Create the render payloads
1164 int totalParts = mesh.parts.size();1187 int totalParts = mesh.parts.size();
1165 for (int partIndex = 0; partIndex < totalParts; partIndex++) {1188 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
1167 shapeID++;1196 shapeID++;
1168 }1197 }
1169 }1198 }
@@ -1176,15 +1205,22 @@ bool Model::initWhenReady(render::ScenePointer scene) { · 6 unmodified lines
1176 1205
1177 render::PendingChanges pendingChanges;1206 render::PendingChanges pendingChanges;
1178 1207
1208 Transform transform;
1209 transform.setTranslation(_translation);
1210 transform.setRotation(_rotation);
1211
1212 Transform offset;
1213 offset.setScale(_scale);
1214 offset.postTranslate(_offset);
1215
1179 foreach (auto renderItem, _renderItemsSet) {1216 foreach (auto renderItem, _renderItemsSet) {
1180 auto item = scene->allocateID();1217 auto item = scene->allocateID();
1181 auto renderData = MeshPartPayload::Pointer(renderItem);1218 auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderItem);
1182 auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData);
1183 _renderItems.insert(item, renderPayload);1219 _renderItems.insert(item, renderPayload);
1184 pendingChanges.resetItem(item, renderPayload);1220 pendingChanges.resetItem(item, renderPayload);
1185 pendingChanges.updateItem<MeshPartPayload>(item, [&](MeshPartPayload& data) {1221 pendingChanges.updateItem<MeshPartPayload>(item, [transform,offset](MeshPartPayload& data) {
1186 data.updateModelLocation(_translation, _rotation);1222 data.updateTransform(transform, offset);
1187 data.model->_needsUpdateClusterMatrices = true;1223 data.notifyLocationChanged();
1188 });1224 });
1189 }1225 }
1190 scene->enqueuePendingChanges(pendingChanges);1226 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