diff options
| author | lbavoil <[email protected]> | 2018-03-15 11:08:34 +0100 |
|---|---|---|
| committer | lbavoil <[email protected]> | 2018-03-15 11:08:34 +0100 |
| commit | 636807e68a85a978473764d171ed0c7cc36f9be6 (patch) | |
| tree | 784a3d4fa8f48b4c085dd959678505b2af12f425 /samples/dual_layer/D3D11/src/Camera.cpp | |
| parent | Remove test folder (diff) | |
| download | hbaoplus-636807e68a85a978473764d171ed0c7cc36f9be6.tar.xz hbaoplus-636807e68a85a978473764d171ed0c7cc36f9be6.zip | |
HBAO+ 4.0.0.23740451
Diffstat (limited to 'samples/dual_layer/D3D11/src/Camera.cpp')
| -rw-r--r-- | samples/dual_layer/D3D11/src/Camera.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/samples/dual_layer/D3D11/src/Camera.cpp b/samples/dual_layer/D3D11/src/Camera.cpp new file mode 100644 index 0000000..fee0fe3 --- /dev/null +++ b/samples/dual_layer/D3D11/src/Camera.cpp @@ -0,0 +1,55 @@ +/* +* Copyright (c) 2008-2018, NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA CORPORATION and its licensors retain all intellectual property +* and proprietary rights in and to this software, related documentation +* and any modifications thereto. Any use, reproduction, disclosure or +* distribution of this software and related documentation without an express +* license agreement from NVIDIA CORPORATION is strictly prohibited. +*/ + +#include "Camera.h" + +Camera::Camera() +{ + InitProjectionMatrix(1280, 720); + + mPosition = { -5.0f, -5.0f, 3.0f }; + mViewVector = XMVector3Normalize({ -4.0f, -4.0f, -2.0f }); + UpdateViewMatrix(); +} + +void Camera::InitProjectionMatrix(uint32_t width, uint32_t height, float zNear, float zFar) +{ + mMatProj = XMMatrixPerspectiveFovRH(XMConvertToRadians(60.0f), (float)width / (float)height, zNear, zFar); + UpdateViewMatrix(); +} + +void Camera::MoveForward(float dt) +{ + mPosition += mViewVector * dt; + UpdateViewMatrix(); +} + +void Camera::MoveRight(float dt) +{ + mPosition += XMMatrixTranspose(mMatView).r[0] * dt; + UpdateViewMatrix(); +} + +void Camera::AdvanceAngles(float yaw, float pitch) +{ + XMMATRIX matBasisVecs = XMMatrixTranspose(mMatView); + + XMMATRIX matRot = XMMatrixRotationY(yaw);// *XMMatrixRotationX(pitch); + + mViewVector = XMVector3Rotate(mViewVector, XMQuaternionRotationAxis(matBasisVecs.r[1], yaw)); + mViewVector = XMVector3Rotate(mViewVector, XMQuaternionRotationAxis(matBasisVecs.r[0], pitch)); + UpdateViewMatrix(); +} + +void Camera::UpdateViewMatrix() +{ + mMatView = XMMatrixLookAtRH(mPosition, mPosition + mViewVector, { 0.0f, 0.0f, 1.0f }); + mMatViewProj = XMMatrixMultiply(mMatView, mMatProj); +} |