From cadf00fecf92ef6c529834179a559b6d5babc4be Mon Sep 17 00:00:00 2001 From: beholder Date: Sun, 22 Oct 2017 19:00:23 +0300 Subject: [PATCH 1/5] add missing 'eyeToWorld' assignment --- interface/src/Application.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 0b99ce5004..6e7a405181 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5090,6 +5090,7 @@ void Application::update(float deltaTime) { } this->updateCamera(appRenderArgs._renderArgs); + appRenderArgs._eyeToWorld = _myCamera.getTransform(); appRenderArgs._isStereo = false; { From 3b4185fdb31d4acc7770241b2d483358a7dfe1be Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 23 Oct 2017 19:30:36 +0100 Subject: [PATCH 2/5] WL 21508 - Improve upon Skybox Changer This involved a second PR, due to optimizing the way the Skyboxes are laid out. All of the Skyboxes will now appear at once, with the random button being removed. You are able to scroll up and down the list and choose which Skybox you'd like to pick. --- .../resources/qml/hifi/SkyboxChanger.qml | 63 +++++-------------- .../qml/hifi/SkyboxSelectionModel.qml | 40 ------------ 2 files changed, 16 insertions(+), 87 deletions(-) delete mode 100644 interface/resources/qml/hifi/SkyboxSelectionModel.qml diff --git a/interface/resources/qml/hifi/SkyboxChanger.qml b/interface/resources/qml/hifi/SkyboxChanger.qml index 2aa0460e15..d6cfa91988 100644 --- a/interface/resources/qml/hifi/SkyboxChanger.qml +++ b/interface/resources/qml/hifi/SkyboxChanger.qml @@ -12,6 +12,7 @@ import QtQuick 2.5 import "../styles-uit" import "../controls-uit" as HifiControls +import QtQuick.Controls 2.2 Item { id: root; @@ -20,7 +21,7 @@ Item { property var defaultThumbnails: []; property var defaultFulls: []; - SkyboxSelectionModel { + ListModel { id: skyboxModel; } @@ -41,44 +42,18 @@ Item { for (var i = 0; i < arr.length; i++) { defaultThumbnails.push(arr[i].thumb); defaultFulls.push(arr[i].full); + skyboxModel.append({}); } - setDefaultSkyboxes(); + setSkyboxes(); } - function setDefaultSkyboxes() { + function setSkyboxes() { for (var i = 0; i < skyboxModel.count; i++) { skyboxModel.setProperty(i, "thumbnailPath", defaultThumbnails[i]); skyboxModel.setProperty(i, "fullSkyboxPath", defaultFulls[i]); } } - function shuffle(array) { - var tmp, current, top = array.length; - if (top) { - while (--top) { - current = Math.floor(Math.random() * (top + 1)); - tmp = array[current]; - array[current] = array[top]; - array[top] = tmp; - } - } - return array; - } - - function chooseRandom() { - for (var a = [], i=0; i < defaultFulls.length; ++i) { - a[i] = i; - } - - a = shuffle(a); - - for (var i = 0; i < skyboxModel.count; i++) { - skyboxModel.setProperty(i, "thumbnailPath", defaultThumbnails[a[i]]); - skyboxModel.setProperty(i, "fullSkyboxPath", defaultFulls[a[i]]); - } - } - - Component.onCompleted: { getSkyboxes(); } @@ -116,33 +91,19 @@ Item { horizontalAlignment: Text.AlignHCenter; verticalAlignment: Text.AlignVCenter; } - HifiControls.Button { - id: randomButton - text: "Randomize" - color: hifi.buttons.blue - colorScheme: root.colorScheme - width: 100 - anchors.right: parent.right - anchors.top: parent.top - anchors.topMargin: 5 - anchors.rightMargin: 40 - onClicked: { - chooseRandom() - } - } } GridView { id: gridView - interactive: false + interactive: true clip: true anchors.top: titleBarContainer.bottom anchors.topMargin: 20 anchors.horizontalCenter: parent.horizontalCenter width: 400 - height: parent.height + //height: parent.height + anchors.bottom: parent.bottom currentIndex: -1 - cellWidth: 200 cellHeight: 200 model: skyboxModel @@ -168,6 +129,14 @@ Item { } } } + ScrollBar.vertical: ScrollBar { + parent: gridView.parent + anchors.top: gridView.top + anchors.left: gridView.right + anchors.bottom: gridView.bottom + anchors.leftMargin: 10 + width: 19 + } } signal sendToScript(var message); diff --git a/interface/resources/qml/hifi/SkyboxSelectionModel.qml b/interface/resources/qml/hifi/SkyboxSelectionModel.qml deleted file mode 100644 index 45a964fcb3..0000000000 --- a/interface/resources/qml/hifi/SkyboxSelectionModel.qml +++ /dev/null @@ -1,40 +0,0 @@ -// -// SkyboxSelectionModel.qml -// qml/hifi -// -// Created by Cain Kilgore on 21st October 2017 -// Copyright 2017 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -import QtQuick 2.5 - -ListModel { - id: root; - ListElement{ - thumbnailPath: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/thumbnails/thumb_1.jpg" - fullSkyboxPath: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxes/1.jpg" - } - ListElement{ - thumbnailPath: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/thumbnails/thumb_1.jpg" - fullSkyboxPath: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxes/1.jpg" - } - ListElement{ - thumbnailPath: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/thumbnails/thumb_1.jpg" - fullSkyboxPath: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxes/1.jpg" - } - ListElement{ - thumbnailPath: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/thumbnails/thumb_1.jpg" - fullSkyboxPath: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxes/1.jpg" - } - ListElement{ - thumbnailPath: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/thumbnails/thumb_1.jpg" - fullSkyboxPath: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxes/1.jpg" - } - ListElement{ - thumbnailPath: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/thumbnails/thumb_1.jpg" - fullSkyboxPath: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxes/1.jpg" - } -} From b60b58ff35b538dd6104cc52069a40eab0f1f038 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 23 Oct 2017 19:40:43 +0100 Subject: [PATCH 3/5] zFox Changes --- interface/resources/qml/hifi/SkyboxChanger.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/hifi/SkyboxChanger.qml b/interface/resources/qml/hifi/SkyboxChanger.qml index d6cfa91988..f0c97a11a3 100644 --- a/interface/resources/qml/hifi/SkyboxChanger.qml +++ b/interface/resources/qml/hifi/SkyboxChanger.qml @@ -39,7 +39,8 @@ Item { function sortSkyboxes(response) { var arr = JSON.parse(response); - for (var i = 0; i < arr.length; i++) { + var arrLength = arr.length; + for (var i = 0; i < arrLength; i++) { defaultThumbnails.push(arr[i].thumb); defaultFulls.push(arr[i].full); skyboxModel.append({}); @@ -101,7 +102,6 @@ Item { anchors.topMargin: 20 anchors.horizontalCenter: parent.horizontalCenter width: 400 - //height: parent.height anchors.bottom: parent.bottom currentIndex: -1 cellWidth: 200 From 55ba093f09b5548b297f7b81ce97d5195114d848 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Mon, 23 Oct 2017 13:09:40 -0700 Subject: [PATCH 4/5] update line render transform on end edit --- interface/src/ui/overlays/Line3DOverlay.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/interface/src/ui/overlays/Line3DOverlay.cpp b/interface/src/ui/overlays/Line3DOverlay.cpp index 69f52c5f2e..bdb35d4f49 100644 --- a/interface/src/ui/overlays/Line3DOverlay.cpp +++ b/interface/src/ui/overlays/Line3DOverlay.cpp @@ -96,6 +96,7 @@ void Line3DOverlay::setEnd(const glm::vec3& end) { } else { _direction = glm::vec3(0.0f); } + notifyRenderTransformChange(); } void Line3DOverlay::setLocalEnd(const glm::vec3& localEnd) { From 4f5851f420e0b115b1ca5d9e394e978e42719c90 Mon Sep 17 00:00:00 2001 From: Bradley Austin Davis Date: Fri, 20 Oct 2017 13:57:30 -0700 Subject: [PATCH 5/5] Reducing needless render updates --- .../src/RenderableEntityItem.cpp | 4 +++- .../entities-renderer/src/RenderableEntityItem.h | 7 ++++++- .../src/RenderableLineEntityItem.cpp | 5 +++-- .../src/RenderableModelEntityItem.cpp | 2 +- .../src/RenderableParticleEffectEntityItem.cpp | 5 +++-- .../src/RenderableShapeEntityItem.cpp | 15 ++++++++++++--- .../src/RenderableShapeEntityItem.h | 1 + .../src/RenderableTextEntityItem.cpp | 5 +++-- .../src/RenderableWebEntityItem.cpp | 6 +++--- .../src/RenderableWebEntityItem.h | 1 + .../src/RenderableZoneEntityItem.cpp | 3 ++- .../src/RenderableZoneEntityItem.h | 1 + 12 files changed, 39 insertions(+), 16 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableEntityItem.cpp b/libraries/entities-renderer/src/RenderableEntityItem.cpp index 07c5694a2a..f9e88b430f 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableEntityItem.cpp @@ -50,7 +50,9 @@ void EntityRenderer::initEntityRenderers() { REGISTER_ENTITY_TYPE_WITH_FACTORY(PolyVox, RenderablePolyVoxEntityItem::factory) } - +const Transform& EntityRenderer::getModelTransform() const { + return _modelTransform; +} void EntityRenderer::makeStatusGetters(const EntityItemPointer& entity, Item::Status::Getters& statusGetters) { auto nodeList = DependencyManager::get(); diff --git a/libraries/entities-renderer/src/RenderableEntityItem.h b/libraries/entities-renderer/src/RenderableEntityItem.h index 34dbceb643..d770e7c7aa 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.h +++ b/libraries/entities-renderer/src/RenderableEntityItem.h @@ -105,8 +105,10 @@ protected: template std::shared_ptr asTypedEntity() { return std::static_pointer_cast(_entity); } + static void makeStatusGetters(const EntityItemPointer& entity, Item::Status::Getters& statusGetters); static std::function _entitiesShouldFadeFunction; + const Transform& getModelTransform() const; SharedSoundPointer _collisionSound; QUuid _changeHandlerId; @@ -114,7 +116,6 @@ protected: quint64 _fadeStartTime{ usecTimestampNow() }; bool _isFading{ _entitiesShouldFadeFunction() }; bool _prevIsTransparent { false }; - Transform _modelTransform; Item::Bound _bound; bool _visible { false }; bool _moving { false }; @@ -123,6 +124,10 @@ protected: private: + // The base class relies on comparing the model transform to the entity transform in order + // to trigger an update, so the member must not be visible to derived classes as a modifiable + // transform + Transform _modelTransform; // The rendering code only gets access to the entity in very specific circumstances // i.e. to see if the rendering code needs to update because of a change in state of the // entity. This forces all the rendering code itself to be independent of the entity diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index ca6ad5a32b..9ac7e9921f 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -49,9 +49,10 @@ void LineEntityRenderer::doRender(RenderArgs* args) { PerformanceTimer perfTimer("RenderableLineEntityItem::render"); Q_ASSERT(args->_batch); gpu::Batch& batch = *args->_batch; + const auto& modelTransform = getModelTransform(); Transform transform = Transform(); - transform.setTranslation(_modelTransform.getTranslation()); - transform.setRotation(_modelTransform.getRotation()); + transform.setTranslation(modelTransform.getTranslation()); + transform.setRotation(modelTransform.getRotation()); batch.setModelTransform(transform); if (_linePoints.size() > 1) { DependencyManager::get()->bindSimpleProgram(batch); diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 0f764d3a29..ff5bce4607 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1311,7 +1311,7 @@ void ModelEntityRenderer::doRender(RenderArgs* args) { if (!model || (model && model->didVisualGeometryRequestFail())) { static glm::vec4 greenColor(0.0f, 1.0f, 0.0f, 1.0f); gpu::Batch& batch = *args->_batch; - batch.setModelTransform(_modelTransform); // we want to include the scale as well + batch.setModelTransform(getModelTransform()); // we want to include the scale as well DependencyManager::get()->renderWireCubeInstance(args, batch, greenColor); return; } diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 3328076911..facf762288 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -251,12 +251,13 @@ void ParticleEffectEntityRenderer::stepSimulation() { }); if (_emitting && particleProperties.emitting()) { + const auto& modelTransform = getModelTransform(); uint64_t emitInterval = particleProperties.emitIntervalUsecs(); if (emitInterval > 0 && interval >= _timeUntilNextEmit) { auto timeRemaining = interval; while (timeRemaining > _timeUntilNextEmit) { // emit particle - _cpuParticles.push_back(createParticle(now, _modelTransform, particleProperties)); + _cpuParticles.push_back(createParticle(now, modelTransform, particleProperties)); _timeUntilNextEmit = emitInterval; if (emitInterval < timeRemaining) { timeRemaining -= emitInterval; @@ -315,7 +316,7 @@ void ParticleEffectEntityRenderer::doRender(RenderArgs* args) { // In trail mode, the particles are created in world space. // so we only set a transform if they're not in trail mode if (!_particleProperties.emission.shouldTrail) { - transform = _modelTransform; + transform = getModelTransform(); transform.setScale(vec3(1)); } batch.setModelTransform(transform); diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp index 4028f105c8..7d7de0c08f 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp @@ -76,6 +76,14 @@ bool ShapeEntityRenderer::needsRenderUpdateFromTypedEntity(const TypedEntityPoin return true; } + if (_shape != entity->getShape()) { + return true; + } + + if (_dimensions != entity->getDimensions()) { + return true; + } + return false; } @@ -93,12 +101,13 @@ void ShapeEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce _position = entity->getPosition(); _dimensions = entity->getDimensions(); _orientation = entity->getOrientation(); + _renderTransform = getModelTransform(); if (_shape == entity::Sphere) { - _modelTransform.postScale(SPHERE_ENTITY_SCALE); + _renderTransform.postScale(SPHERE_ENTITY_SCALE); } - _modelTransform.postScale(_dimensions); + _renderTransform.postScale(_dimensions); }); } @@ -133,7 +142,7 @@ void ShapeEntityRenderer::doRender(RenderArgs* args) { glm::vec4 outColor; withReadLock([&] { geometryShape = MAPPING[_shape]; - batch.setModelTransform(_modelTransform); // use a transform with scale, rotation, registration point and translation + batch.setModelTransform(_renderTransform); // use a transform with scale, rotation, registration point and translation outColor = _color; if (_procedural.isReady()) { _procedural.prepare(batch, _position, _dimensions, _orientation); diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.h b/libraries/entities-renderer/src/RenderableShapeEntityItem.h index f0af5b917a..433cb41ad2 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.h +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.h @@ -32,6 +32,7 @@ private: Procedural _procedural; QString _lastUserData; + Transform _renderTransform; entity::Shape _shape { entity::Sphere }; glm::vec4 _color; glm::vec3 _position; diff --git a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp index b4c64aed6f..6c0f4447ae 100644 --- a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp @@ -93,10 +93,11 @@ void TextEntityRenderer::doRender(RenderArgs* args) { Q_ASSERT(args->_batch); gpu::Batch& batch = *args->_batch; - auto transformToTopLeft = _modelTransform; + const auto& modelTransform = getModelTransform(); + auto transformToTopLeft = modelTransform; if (_faceCamera) { //rotate about vertical to face the camera - glm::vec3 dPosition = args->getViewFrustum().getPosition() - _modelTransform.getTranslation(); + glm::vec3 dPosition = args->getViewFrustum().getPosition() - modelTransform.getTranslation(); // If x and z are 0, atan(x, z) is undefined, so default to 0 degrees float yawRotation = dPosition.x == 0.0f && dPosition.z == 0.0f ? 0.0f : glm::atan(dPosition.x, dPosition.z); glm::quat orientation = glm::quat(glm::vec3(0.0f, yawRotation, 0.0f)); diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp index 4688ef5d2b..4699f2cd8f 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp @@ -139,8 +139,8 @@ void WebEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scene glm::vec2 windowSize = getWindowSize(entity); _webSurface->resize(QSize(windowSize.x, windowSize.y)); - - _modelTransform.postScale(entity->getDimensions()); + _renderTransform = getModelTransform(); + _renderTransform.postScale(entity->getDimensions()); }); } @@ -180,7 +180,7 @@ void WebEntityRenderer::doRender(RenderArgs* args) { gpu::Batch& batch = *args->_batch; withReadLock([&] { - batch.setModelTransform(_modelTransform); + batch.setModelTransform(_renderTransform); }); batch.setResourceTexture(0, _texture); float fadeRatio = _isFading ? Interpolate::calculateFadeRatio(_fadeStartTime) : 1.0f; diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.h b/libraries/entities-renderer/src/RenderableWebEntityItem.h index 4b7e7e25a1..9c79001dc5 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.h +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.h @@ -62,6 +62,7 @@ private: uint16_t _lastDPI; QTimer _timer; uint64_t _lastRenderTime { 0 }; + Transform _renderTransform; }; } } // namespace diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp index f3b664f9b4..f0f5506f8c 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp @@ -248,7 +248,8 @@ void ZoneEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scen void ZoneEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) { if (entity->getShapeType() == SHAPE_TYPE_SPHERE) { - _modelTransform.postScale(SPHERE_ENTITY_SCALE); + _renderTransform = getModelTransform(); + _renderTransform.postScale(SPHERE_ENTITY_SCALE); } } diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.h b/libraries/entities-renderer/src/RenderableZoneEntityItem.h index 30da96cd9d..f39a2e6299 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.h +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.h @@ -119,6 +119,7 @@ private: bool _validSkyboxTexture{ false }; QString _proceduralUserData; + Transform _renderTransform; }; } } // namespace