Expose secondary camera to game logic

This commit is contained in:
Clement 2018-04-16 15:27:43 -07:00
parent 49fad3d868
commit 98cf48694e
4 changed files with 43 additions and 5 deletions

View file

@ -5532,6 +5532,26 @@ void Application::update(float deltaTime) {
{
QMutexLocker viewLocker(&_viewMutex);
_myCamera.loadViewFrustum(_viewFrustum);
auto renderConfig = _renderEngine->getConfiguration();
assert(renderConfig);
auto secondaryCamera = dynamic_cast<SecondaryCameraJobConfig*>(renderConfig->getConfig("SecondaryCamera"));
assert(secondaryCamera);
if (secondaryCamera->isEnabled()) {
_secondaryViewFrustum.setPosition(secondaryCamera->position);
_secondaryViewFrustum.setOrientation(secondaryCamera->orientation);
_secondaryViewFrustum.setProjection(secondaryCamera->vFoV,
secondaryCamera->textureWidth / secondaryCamera->textureHeight,
secondaryCamera->nearClipPlaneDistance,
secondaryCamera->farClipPlaneDistance);
_secondaryViewFrustum.calculate();
_hasSecondaryViewFrustum = true;
} else {
_hasSecondaryViewFrustum = false;
}
}
quint64 now = usecTimestampNow();
@ -5793,6 +5813,13 @@ void Application::queryOctree(NodeType_t serverType, PacketType packetType) {
copyViewFrustum(viewFrustum);
_octreeQuery.setMainViewFrustum(viewFrustum);
if (hasSecondaryViewFrustum()) {
copySecondaryViewFrustum(viewFrustum);
_octreeQuery.setSecondaryViewFrustum(viewFrustum);
} else {
_octreeQuery.clearSecondaryViewFrustum();
}
auto lodManager = DependencyManager::get<LODManager>();
_octreeQuery.setOctreeSizeScale(lodManager->getOctreeSizeScale());
_octreeQuery.setBoundaryLevelAdjust(lodManager->getBoundaryLevelAdjust());
@ -5876,6 +5903,11 @@ void Application::copyDisplayViewFrustum(ViewFrustum& viewOut) const {
viewOut = _displayViewFrustum;
}
void Application::copySecondaryViewFrustum(ViewFrustum& viewOut) const {
QMutexLocker viewLocker(&_viewMutex);
viewOut = _secondaryViewFrustum;
}
void Application::resetSensors(bool andReload) {
DependencyManager::get<DdeFaceTracker>()->reset();
DependencyManager::get<EyeTracker>()->reset();

View file

@ -178,6 +178,9 @@ public:
// which might be different from the viewFrustum, i.e. shadowmap
// passes, mirror window passes, etc
void copyDisplayViewFrustum(ViewFrustum& viewOut) const;
void copySecondaryViewFrustum(ViewFrustum& viewOut) const;
bool hasSecondaryViewFrustum() const { return _hasSecondaryViewFrustum; }
const OctreePacketProcessor& getOctreePacketProcessor() const { return _octreeProcessor; }
QSharedPointer<EntityTreeRenderer> getEntities() const { return DependencyManager::get<EntityTreeRenderer>(); }
QUndoStack* getUndoStack() { return &_undoStack; }
@ -554,6 +557,8 @@ private:
ViewFrustum _viewFrustum; // current state of view frustum, perspective, orientation, etc.
ViewFrustum _lastQueriedViewFrustum; /// last view frustum used to query octree servers (voxels)
ViewFrustum _displayViewFrustum;
ViewFrustum _secondaryViewFrustum;
bool _hasSecondaryViewFrustum;
quint64 _lastQueriedTime;
OctreeQuery _octreeQuery { true }; // NodeData derived class for querying octee cells from octree servers

View file

@ -75,6 +75,10 @@ void ViewFrustum::setProjection(const glm::mat4& projection) {
_width = _corners[TOP_RIGHT_NEAR].x - _corners[TOP_LEFT_NEAR].x;
}
void ViewFrustum::setProjection(float cameraFov, float cameraAspectRatio, float cameraNearClip, float cameraFarClip) {
setProjection(glm::perspective(glm::radians(cameraFov), cameraAspectRatio, cameraNearClip, cameraFarClip));
}
// ViewFrustum::calculate()
//
// Description: this will calculate the view frustum bounds for a given position and direction
@ -168,12 +172,8 @@ int ViewFrustum::fromByteArray(const QByteArray& input) {
0.0f != cameraNearClip &&
0.0f != cameraFarClip &&
cameraNearClip != cameraFarClip) {
setProjection(glm::perspective(
glm::radians(cameraFov),
cameraAspectRatio,
cameraNearClip,
cameraFarClip));
setProjection(cameraFov, cameraAspectRatio, cameraNearClip, cameraFarClip);
calculate();
}

View file

@ -48,6 +48,7 @@ public:
// setters for lens attributes
void setProjection(const glm::mat4 & projection);
void setProjection(float cameraFov, float cameraAspectRatio, float cameraNearClip, float cameraFarClip);
void setFocalLength(float focalLength) { _focalLength = focalLength; }
bool isPerspective() const;