From 8d89ea75f5af6c867abb48c7fb71e37f5e40c691 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 28 Jun 2017 17:41:08 -0700 Subject: [PATCH] Initial commit --- interface/src/SecondaryCamera.cpp | 18 ++++++++++++++++-- interface/src/SecondaryCamera.h | 2 ++ scripts/system/spectatorCamera.js | 3 ++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/interface/src/SecondaryCamera.cpp b/interface/src/SecondaryCamera.cpp index 1fbb75cdad..3adae61aaa 100644 --- a/interface/src/SecondaryCamera.cpp +++ b/interface/src/SecondaryCamera.cpp @@ -12,6 +12,7 @@ #include "SecondaryCamera.h" #include #include +#include using RenderArgsPointer = std::shared_ptr; @@ -40,6 +41,7 @@ void SecondaryCameraRenderTaskConfig::resetSizeSpectatorCamera(int width, int he } class BeginSecondaryCameraFrame { // Changes renderContext for our framebuffer and view. + QUuid _attachedEntityId{}; glm::vec3 _position{}; glm::quat _orientation{}; float _vFoV{}; @@ -54,8 +56,20 @@ public: void configure(const Config& config) { if (config.enabled || config.alwaysEnabled) { - _position = config.position; - _orientation = config.orientation; + _attachedEntityId = config.attachedEntityId; + if (_attachedEntityId != QUuid()) { + auto entityScriptingInterface = DependencyManager::get(); + EntityPropertyFlags entityPropertyFlags; + entityPropertyFlags += PROP_POSITION; + entityPropertyFlags += PROP_ROTATION; + EntityItemProperties entityProperties = entityScriptingInterface->getEntityProperties(config.attachedEntityId, entityPropertyFlags); + + _position = entityProperties.getPosition(); + _orientation = entityProperties.getRotation(); + } else { + _position = config.position; + _orientation = config.orientation; + } _vFoV = config.vFoV; _nearClipPlaneDistance = config.nearClipPlaneDistance; _farClipPlaneDistance = config.farClipPlaneDistance; diff --git a/interface/src/SecondaryCamera.h b/interface/src/SecondaryCamera.h index 5ad19c9614..15e6f41ad2 100644 --- a/interface/src/SecondaryCamera.h +++ b/interface/src/SecondaryCamera.h @@ -30,12 +30,14 @@ public: class BeginSecondaryCameraFrameConfig : public render::Task::Config { // Exposes secondary camera parameters to JavaScript. Q_OBJECT + Q_PROPERTY(QUuid attachedEntityId MEMBER attachedEntityId NOTIFY dirty) // entity whose properties define camera position and orientation Q_PROPERTY(glm::vec3 position MEMBER position NOTIFY dirty) // of viewpoint to render from Q_PROPERTY(glm::quat orientation MEMBER orientation NOTIFY dirty) // of viewpoint to render from Q_PROPERTY(float vFoV MEMBER vFoV NOTIFY dirty) // Secondary camera's vertical field of view. In degrees. Q_PROPERTY(float nearClipPlaneDistance MEMBER nearClipPlaneDistance NOTIFY dirty) // Secondary camera's near clip plane distance. In meters. Q_PROPERTY(float farClipPlaneDistance MEMBER farClipPlaneDistance NOTIFY dirty) // Secondary camera's far clip plane distance. In meters. public: + QUuid attachedEntityId{}; glm::vec3 position{}; glm::quat orientation{}; float vFoV{ 45.0f }; diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 5154322daa..5b6c826e88 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -93,7 +93,7 @@ beginSpectatorFrameRenderConfig.nearClipPlaneDistance = nearClipPlaneDistance; beginSpectatorFrameRenderConfig.farClipPlaneDistance = farClipPlaneDistance; cameraRotation = MyAvatar.orientation, cameraPosition = inFrontOf(1, Vec3.sum(MyAvatar.position, { x: 0, y: 0.3, z: 0 })); - cameraUpdateInterval = Script.setInterval(updateRenderFromCamera, 11); // Update every 11ms (90.9hz) + //cameraUpdateInterval = Script.setInterval(updateRenderFromCamera, 11); // Update every 11ms (90.9hz) camera = Entities.addEntity({ "angularDamping": 1, "damping": 1, @@ -112,6 +112,7 @@ "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":true}}" }, true); + beginSpectatorFrameRenderConfig.attachedEntityId = camera; updateOverlay(); setDisplay(monitorShowsCameraView); }