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 | 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 | 5617 | auto entityScriptingInterface = DependencyManager::get<EntityScriptingInterface>(); |
| 5590 | 5618 | auto entityProperties = entityScriptingInterface->getEntityProperties(camera->attachedEntityId); |
| 5591 | 5619 | glm::vec3 mirrorPropertiesPosition = entityProperties.getPosition(); |