mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-25 16:55:07 +02:00
Expose secondary camera to game logic
This commit is contained in:
parent
49fad3d868
commit
98cf48694e
4 changed files with 43 additions and 5 deletions
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue