Showing the changes to interface/src/Application.cpp (1 of 3 files). Show all
Unified · Split
| @@ -5585,7 +5585,35 @@ void Application::updateSecondaryCameraViewFrustum() { · 5584 unmodified lines | |||
| 5585 | } | 5585 | } |
| 5586 | 5586 | ||
| 5587 | ViewFrustum secondaryViewFrustum; | 5587 | ViewFrustum secondaryViewFrustum; |
| 5588 | if (camera->mirrorProjection && !camera->attachedEntityId.isNull()) { | 5588 | if (camera->portalProjection && !camera->attachedEntityId.isNull()) { |
| 5589 | auto entityScriptingInterface = DependencyManager::get<EntityScriptingInterface>(); | ||
| 5590 | auto entityProperties = entityScriptingInterface->getEntityProperties(camera->attachedEntityId); | ||
| 5591 | glm::vec3 mirrorPropertiesPosition = entityProperties.getPosition(); | ||
| 5592 | glm::quat mirrorPropertiesRotation = entityProperties.getRotation(); | ||
| 5593 | glm::vec3 mirrorPropertiesDimensions = entityProperties.getDimensions(); | ||
| 5594 | glm::vec3 halfMirrorPropertiesDimensions = 0.5f * mirrorPropertiesDimensions; | ||
| 5595 | |||
| 5596 | glm::mat4 worldFromMirrorRotation = glm::mat4_cast(mirrorPropertiesRotation) * glm::scale(vec3(1.0f, 1.0f, 1.0f)); | ||
| 5597 | glm::mat4 worldFromMirrorTranslation = glm::translate(mirrorPropertiesPosition); | ||
| 5598 | glm::mat4 worldFromMirror = worldFromMirrorTranslation * worldFromMirrorRotation; | ||
| 5599 | glm::mat4 mirrorFromWorld = glm::inverse(worldFromMirror); | ||
| 5600 | |||
| 5601 | glm::vec3 mainCameraPositionWorld = getCamera().getPosition(); | ||
| 5602 | glm::vec3 mainCameraPositionMirror = vec3(mirrorFromWorld * vec4(mainCameraPositionWorld, 1.0f)); | ||
| 5603 | glm::vec3 mirrorCameraPositionMirror = vec3(mainCameraPositionMirror.x, mainCameraPositionMirror.y, | ||
| 5604 | mainCameraPositionMirror.z); | ||
| 5605 | glm::vec3 mirrorCameraPositionWorld = vec3(worldFromMirror * vec4(mirrorCameraPositionMirror, 1.0f)); | ||
| 5606 | |||
| 5607 | glm::quat mirrorCameraOrientation = glm::quat_cast(worldFromMirrorRotation); | ||
| 5608 | secondaryViewFrustum.setPosition(mirrorCameraPositionWorld); | ||
| 5609 | secondaryViewFrustum.setOrientation(mirrorCameraOrientation); | ||
| 5610 | |||
| 5611 | float nearClip = mirrorCameraPositionMirror.z + mirrorPropertiesDimensions.z * 2.0f; | ||
| 5612 | glm::vec3 upperRight = halfMirrorPropertiesDimensions - mirrorCameraPositionMirror; | ||
| 5613 | glm::vec3 bottomLeft = -halfMirrorPropertiesDimensions - mirrorCameraPositionMirror; | ||
| 5614 | glm::mat4 frustum = glm::frustum(bottomLeft.x, upperRight.x, bottomLeft.y, upperRight.y, nearClip, camera->farClipPlaneDistance); | ||
| 5615 | secondaryViewFrustum.setProjection(frustum); | ||
| 5616 | } else if (camera->mirrorProjection && !camera->attachedEntityId.isNull()) { | ||
| 5589 | auto entityScriptingInterface = DependencyManager::get<EntityScriptingInterface>(); | 5617 | auto entityScriptingInterface = DependencyManager::get<EntityScriptingInterface>(); |
| 5590 | auto entityProperties = entityScriptingInterface->getEntityProperties(camera->attachedEntityId); | 5618 | auto entityProperties = entityScriptingInterface->getEntityProperties(camera->attachedEntityId); |
| 5591 | glm::vec3 mirrorPropertiesPosition = entityProperties.getPosition(); | 5619 | glm::vec3 mirrorPropertiesPosition = entityProperties.getPosition(); |