From f6bba678977d0bf1a64dcc753f504425fe5b2f90 Mon Sep 17 00:00:00 2001 From: iDunnoDev Date: Mon, 9 May 2022 17:50:22 +0100 Subject: [PATCH] Added follow cam Added "Controlled" mesh classes Added Global Lighting Class Added Gamepad controls Split terrain nodes into Height and Perlin classes Fixed Splitmesh node stuff --- Graphics2/Camera.cpp | 126 ++++++++--- Graphics2/Camera.h | 9 +- Graphics2/ColorGradient.cpp | 15 +- Graphics2/ColorGradient.h | 1 + Graphics2/ControlledMeshNode.cpp | 24 +++ Graphics2/ControlledMeshNode.h | 18 ++ Graphics2/ControlledSplitMeshNode.cpp | 25 +++ Graphics2/ControlledSplitMeshNode.h | 20 ++ Graphics2/DirectXFramework.cpp | 1 + Graphics2/DirectXFramework.h | 3 + Graphics2/GamePadController.cpp | 62 +++++- Graphics2/GamePadController.h | 5 +- Graphics2/GlobalLighting.cpp | 38 ++++ Graphics2/GlobalLighting.h | 21 ++ Graphics2/Graphics2.cpp | 222 ++++++++++++++++---- Graphics2/Graphics2.h | 24 ++- Graphics2/Graphics2.vcxproj | 18 +- Graphics2/Graphics2.vcxproj.filters | 33 +++ Graphics2/HeightMapTerrainNode.cpp | 36 ++++ Graphics2/HeightMapTerrainNode.h | 16 ++ Graphics2/MeshNode.cpp | 5 +- Graphics2/MeshRenderer.cpp | 2 +- Graphics2/Models/Tree/COLOR.JPG | Bin 0 -> 137254 bytes Graphics2/Models/Tree/Kashtan.jpg | Bin 0 -> 113923 bytes Graphics2/Models/Tree/Tree1.3ds | Bin 0 -> 2326661 bytes Graphics2/ObjectNode.cpp | 132 ++++++++++++ Graphics2/ObjectNode.h | 40 ++++ Graphics2/PerlinTerrainNode.cpp | 135 ++++++++++++ Graphics2/PerlinTerrainNode.h | 29 +++ Graphics2/SceneGraph.cpp | 5 + Graphics2/SceneGraph.h | 4 +- Graphics2/SharedMethods.cpp | 36 +--- Graphics2/SharedMethods.h | 62 +++--- Graphics2/SkyNode.cpp | 291 ++++++++++++++++++++++++++ Graphics2/SkyNode.h | 67 ++++++ Graphics2/SkyShader.hlsl | 36 ++++ Graphics2/SplitMeshNode.cpp | 30 ++- Graphics2/SplitMeshNode.h | 3 + Graphics2/SubMeshNode.cpp | 31 +-- Graphics2/SubMeshNode.h | 14 +- Graphics2/SubMeshRenderer.cpp | 119 +++++++---- Graphics2/SubMeshRenderer.h | 14 +- Graphics2/TerrainNode.cpp | 208 +++++++++--------- Graphics2/TerrainNode.h | 52 +++-- Graphics2/TerrainShaders.hlsl | 39 ++-- Graphics2/TexturedCubeNode.cpp | 23 +- Graphics2/Textures/SkyDawn.dds | Bin 0 -> 4194512 bytes Graphics2/Textures/SkyWater.dds | Bin 0 -> 4194512 bytes Graphics2/Textures/cloudySky.dds | Bin 0 -> 1573012 bytes Graphics2/Textures/darkdirtB.dds | Bin 0 -> 1398256 bytes Graphics2/Textures/grassB.dds | Bin 0 -> 1398256 bytes Graphics2/Textures/lightdirtB.dds | Bin 0 -> 1398256 bytes Graphics2/Textures/skymap.dds | Bin 0 -> 1572992 bytes Graphics2/Textures/snowB.dds | Bin 0 -> 1398256 bytes Graphics2/Textures/stoneB.dds | Bin 0 -> 1398256 bytes Graphics2/Textures/testheightmap2.zip | Bin 2155762 -> 0 bytes Graphics2/Textures/waterNormalsB.dds | Bin 0 -> 174904 bytes Graphics2/Textures/waterNormalsB.jpg | Bin 0 -> 45387 bytes 58 files changed, 1743 insertions(+), 351 deletions(-) create mode 100644 Graphics2/ControlledMeshNode.cpp create mode 100644 Graphics2/ControlledMeshNode.h create mode 100644 Graphics2/ControlledSplitMeshNode.cpp create mode 100644 Graphics2/ControlledSplitMeshNode.h create mode 100644 Graphics2/GlobalLighting.cpp create mode 100644 Graphics2/GlobalLighting.h create mode 100644 Graphics2/HeightMapTerrainNode.cpp create mode 100644 Graphics2/HeightMapTerrainNode.h create mode 100644 Graphics2/Models/Tree/COLOR.JPG create mode 100644 Graphics2/Models/Tree/Kashtan.jpg create mode 100644 Graphics2/Models/Tree/Tree1.3ds create mode 100644 Graphics2/ObjectNode.cpp create mode 100644 Graphics2/ObjectNode.h create mode 100644 Graphics2/PerlinTerrainNode.cpp create mode 100644 Graphics2/PerlinTerrainNode.h create mode 100644 Graphics2/SkyNode.cpp create mode 100644 Graphics2/SkyNode.h create mode 100644 Graphics2/SkyShader.hlsl create mode 100644 Graphics2/Textures/SkyDawn.dds create mode 100644 Graphics2/Textures/SkyWater.dds create mode 100644 Graphics2/Textures/cloudySky.dds create mode 100644 Graphics2/Textures/darkdirtB.dds create mode 100644 Graphics2/Textures/grassB.dds create mode 100644 Graphics2/Textures/lightdirtB.dds create mode 100644 Graphics2/Textures/skymap.dds create mode 100644 Graphics2/Textures/snowB.dds create mode 100644 Graphics2/Textures/stoneB.dds delete mode 100644 Graphics2/Textures/testheightmap2.zip create mode 100644 Graphics2/Textures/waterNormalsB.dds create mode 100644 Graphics2/Textures/waterNormalsB.jpg diff --git a/Graphics2/Camera.cpp b/Graphics2/Camera.cpp index fa59962..c18f52a 100644 --- a/Graphics2/Camera.cpp +++ b/Graphics2/Camera.cpp @@ -1,17 +1,16 @@ #include "Camera.h" -XMVECTOR defaultForward = XMVectorSet(0.0f, 0.0f, 1.0f, 0.0f); -XMVECTOR defaultRight = XMVectorSet(1.0f, 0.0f, 0.0f, 0.0f); -XMVECTOR defaultUp = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f); - Camera::Camera() { + _nodeFollowed = nullptr; _cameraPosition = XMFLOAT4(0.0f, 0.0f, 0.0f, 0.0f); _moveLeftRight = 0.0f; _moveForwardBack = 0.0f; _cameraYaw = 0.0f; _cameraPitch = 0.0f; _cameraRoll = 0.0f; + _followPositionOnly = false; + _followOffset = XMFLOAT3(0.0f, 0.0f, 0.0f); } Camera::~Camera() @@ -83,14 +82,28 @@ XMVECTOR Camera::GetCameraPosition(void) return XMLoadFloat4(&_cameraPosition); } -XMFLOAT4 Camera::GetRawCameraPosition(void) -{ - return _cameraPosition; -} - void Camera::SetCameraPosition(float x, float y, float z) { - _cameraPosition = XMFLOAT4(x, y, z, 0.0f); + SetCameraPosition(XMFLOAT4(x, y, z, 0.0f)); +} + +void Camera::SetCameraPosition(XMVECTOR vectorIn) +{ + XMFLOAT4 floatIn; + XMStoreFloat4(&floatIn, vectorIn); + SetCameraPosition(floatIn); +} + +void Camera::SetCameraPosition(XMFLOAT4 floatIn) +{ + _cameraPosition = floatIn; +} + +void Camera::SetFollowNode(shared_ptr nodeFollowed, XMFLOAT3 followOffset, bool positionOnly) +{ + _nodeFollowed = nodeFollowed; + _followOffset = followOffset; + _followPositionOnly = positionOnly; } void Camera::Update(void) @@ -101,31 +114,84 @@ void Camera::Update(void) XMVECTOR cameraForward; XMVECTOR cameraUp; - // Yaw (rotation around the Y axis) will have an impact on the forward and right vectors - XMMATRIX cameraRotationYaw = XMMatrixRotationAxis(defaultUp, _cameraYaw); - cameraRight = XMVector3TransformCoord(defaultRight, cameraRotationYaw); - cameraForward = XMVector3TransformCoord(defaultForward, cameraRotationYaw); + XMVECTOR defaultForward = XMVectorSet(0.0f, 0.0f, 1.0f, 0.0f); + XMVECTOR defaultRight = XMVectorSet(1.0f, 0.0f, 0.0f, 0.0f); + XMVECTOR defaultUp = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f); - // Pitch (rotation around the X axis) impact the up and forward vectors - XMMATRIX cameraRotationPitch = XMMatrixRotationAxis(cameraRight, _cameraPitch); - cameraUp = XMVector3TransformCoord(defaultUp, cameraRotationPitch); - cameraForward = XMVector3TransformCoord(cameraForward, cameraRotationPitch); + if (_nodeFollowed == nullptr) + { + // Yaw (rotation around the Y axis) will have an impact on the forward and right vectors + XMMATRIX cameraRotationYaw = XMMatrixRotationAxis(defaultUp, _cameraYaw); + cameraRight = XMVector3TransformCoord(defaultRight, cameraRotationYaw); + cameraForward = XMVector3TransformCoord(defaultForward, cameraRotationYaw); - // Roll (rotation around the Z axis) will impact the Up and Right vectors - XMMATRIX cameraRotationRoll = XMMatrixRotationAxis(cameraForward, _cameraRoll); - cameraUp = XMVector3TransformCoord(cameraUp, cameraRotationRoll); - cameraRight = XMVector3TransformCoord(cameraRight, cameraRotationRoll); + // Pitch (rotation around the X axis) impact the up and forward vectors + XMMATRIX cameraRotationPitch = XMMatrixRotationAxis(cameraRight, _cameraPitch); + cameraUp = XMVector3TransformCoord(defaultUp, cameraRotationPitch); + cameraForward = XMVector3TransformCoord(cameraForward, cameraRotationPitch); - // Adjust the camera position by the appropriate amount forward/back and left/right - cameraPosition = XMLoadFloat4(&_cameraPosition) + _moveLeftRight * cameraRight + _moveForwardBack * cameraForward; - XMStoreFloat4(&_cameraPosition, cameraPosition); + // Roll (rotation around the Z axis) will impact the Up and Right vectors + XMMATRIX cameraRotationRoll = XMMatrixRotationAxis(cameraForward, _cameraRoll); + cameraUp = XMVector3TransformCoord(cameraUp, cameraRotationRoll); + cameraRight = XMVector3TransformCoord(cameraRight, cameraRotationRoll); - // Reset the amount we are moving - _moveLeftRight = 0.0f; - _moveForwardBack = 0.0f; + // Adjust the camera position by the appropriate amount forward/back and left/right + cameraPosition = XMLoadFloat4(&_cameraPosition) + _moveLeftRight * cameraRight + _moveForwardBack * cameraForward; + XMStoreFloat4(&_cameraPosition, cameraPosition); - // Calculate a vector that tells us the direction the camera is looking in - cameraTarget = cameraPosition + XMVector3Normalize(cameraForward); + // Reset the amount we are moving + _moveLeftRight = 0.0f; + _moveForwardBack = 0.0f; + + // Calculate a vector that tells us the direction the camera is looking in + cameraTarget = cameraPosition + XMVector3Normalize(cameraForward); + } + else + { + if (_followPositionOnly) + { + _cameraYaw = 0.0f; + _cameraPitch = 0.0f; + _cameraRoll = 0.0f; + } + else + { + _cameraYaw = XMConvertToRadians(_nodeFollowed->GetYaw()); + _cameraPitch = XMConvertToRadians(_nodeFollowed->GetPitch()); + _cameraRoll = XMConvertToRadians(_nodeFollowed->GetRoll()); + } + + // Yaw (rotation around the Y axis) will have an impact on the forward and right vectors + XMMATRIX cameraRotationYaw = XMMatrixRotationAxis(defaultUp, _cameraYaw); + cameraRight = XMVector3TransformCoord(defaultRight, cameraRotationYaw); + cameraForward = XMVector3TransformCoord(defaultForward, cameraRotationYaw); + + // Pitch (rotation around the X axis) impact the up and forward vectors + XMMATRIX cameraRotationPitch = XMMatrixRotationAxis(cameraRight, _cameraPitch); + cameraUp = XMVector3TransformCoord(defaultUp, cameraRotationPitch); + cameraForward = XMVector3TransformCoord(cameraForward, cameraRotationPitch); + + // Roll (rotation around the Z axis) will impact the Up and Right vectors + XMMATRIX cameraRotationRoll = XMMatrixRotationAxis(cameraForward, _cameraRoll); + cameraUp = XMVector3TransformCoord(cameraUp, cameraRotationRoll); + cameraRight = XMVector3TransformCoord(cameraRight, cameraRotationRoll); + + XMFLOAT4 nodePosition; + XMStoreFloat4(&nodePosition, _nodeFollowed->GetNodePosition()); + if (_followPositionOnly) + { + cameraPosition = XMVectorSet(nodePosition.x + _followOffset.x, nodePosition.y + _followOffset.y, nodePosition.z + _followOffset.z, 1.0f); + cameraTarget = cameraPosition + XMVector3Normalize(cameraForward); + } + else + { + XMVECTOR offset = XMVectorSet(_followOffset.x, _followOffset.y, _followOffset.z, 1.0f); + cameraPosition = _nodeFollowed->GetNodePosition() + offset; + cameraTarget = XMLoadFloat4(&nodePosition) + XMVector3Normalize(cameraForward); + } + // Set the camera position + XMStoreFloat4(&_cameraPosition, cameraPosition); + } // and calculate our view matrix XMStoreFloat4x4(&_viewMatrix, XMMatrixLookAtLH(cameraPosition, cameraTarget, cameraUp)); diff --git a/Graphics2/Camera.h b/Graphics2/Camera.h index 14b9e0b..10f5f8e 100644 --- a/Graphics2/Camera.h +++ b/Graphics2/Camera.h @@ -1,6 +1,8 @@ #pragma once #include "core.h" #include "DirectXCore.h" +#include "SharedMethods.h" +#include "ObjectNode.h" class Camera { @@ -11,7 +13,8 @@ public: void Update(); XMMATRIX GetViewMatrix(); XMVECTOR GetCameraPosition(); - XMFLOAT4 GetRawCameraPosition(); + void SetCameraPosition(XMVECTOR vectorIn); + void SetCameraPosition(XMFLOAT4 floatIn); void SetCameraPosition(float x, float y, float z); void SetPitch(float pitch); void SetTotalPitch(float pitch); @@ -24,6 +27,7 @@ public: float GetRoll() const; void SetLeftRight(float leftRight); void SetForwardBack(float forwardBack); + void SetFollowNode(shared_ptr nodeFollowed, XMFLOAT3 followOffset, bool positionOnly); private: XMFLOAT4 _cameraPosition; @@ -37,5 +41,8 @@ private: float _cameraPitch; float _cameraRoll; + shared_ptr _nodeFollowed; + XMFLOAT3 _followOffset; + bool _followPositionOnly; }; diff --git a/Graphics2/ColorGradient.cpp b/Graphics2/ColorGradient.cpp index 40f8faa..8563a68 100644 --- a/Graphics2/ColorGradient.cpp +++ b/Graphics2/ColorGradient.cpp @@ -15,6 +15,7 @@ ColorGradient::~ColorGradient() // Get the RGBA value at the give point RGBA ColorGradient::GetRGBAValue(float inputValue) { + // Check if we are at the start or end, return those values if so if (inputValue <= _minValue) { return _colorSteps.front(); @@ -24,10 +25,12 @@ RGBA ColorGradient::GetRGBAValue(float inputValue) return _colorSteps.back(); } + // Get the point which the input value is at between the entire range float range = _maxValue - _minValue; float value = inputValue - _minValue; float steps = range / (float)(_colorSteps.size() - 1); + // Which gradient step are we in int colorStepInside = (int)(value / steps); float normalisedValue = (value - (colorStepInside * steps)) / steps; @@ -38,6 +41,7 @@ RGBA ColorGradient::GetRGBAValue(float inputValue) // Method for interpolating the color between each step RGBA ColorGradient::Interpolate(RGBA a, RGBA b, float pointValue) { + // Check if we are at the start or end, return those values if so if (pointValue <= 0.0f) { return a; @@ -47,10 +51,13 @@ RGBA ColorGradient::Interpolate(RGBA a, RGBA b, float pointValue) return b; } - unsigned int currentRed = (unsigned int)((1.0f - pointValue) * a.red + pointValue * b.red); - unsigned int currentGreen = (unsigned int)((1.0f - pointValue) * a.green + pointValue * b.green); - unsigned int currentBlue = (unsigned int)((1.0f - pointValue) * a.blue + pointValue * b.blue); - unsigned int currentAlpha = (unsigned int)((1.0f - pointValue) * a.alpha + pointValue * b.alpha); + //pointValue = SharedMethods::Clamp(pointValue * 1.5f, 0.0f, 1.0f); + + // Lerp the color values for each channel between the steps + unsigned int currentRed = (unsigned int)SharedMethods::Lerp(a.red, b.red, pointValue); + unsigned int currentGreen = (unsigned int)SharedMethods::Lerp(a.green, b.green, pointValue); + unsigned int currentBlue = (unsigned int)SharedMethods::Lerp(a.blue, b.blue, pointValue); + unsigned int currentAlpha = (unsigned int)SharedMethods::Lerp(a.alpha, b.alpha, pointValue); return RGBA{ currentRed, currentGreen, currentBlue, currentAlpha }; } \ No newline at end of file diff --git a/Graphics2/ColorGradient.h b/Graphics2/ColorGradient.h index dde9b12..a697713 100644 --- a/Graphics2/ColorGradient.h +++ b/Graphics2/ColorGradient.h @@ -1,5 +1,6 @@ #pragma once #include +#include "SharedMethods.h" using namespace std; diff --git a/Graphics2/ControlledMeshNode.cpp b/Graphics2/ControlledMeshNode.cpp new file mode 100644 index 0000000..4e1bc4c --- /dev/null +++ b/Graphics2/ControlledMeshNode.cpp @@ -0,0 +1,24 @@ +#include "ControlledMeshNode.h" + +ControlledMeshNode::ControlledMeshNode(wstring name, wstring modelName) : MeshNode(name, modelName), ObjectNode() +{ +} + +void ControlledMeshNode::Update(FXMMATRIX& currentWorldTransformation) +{ + ObjectNode::Update(_worldTransformation); +} + +bool ControlledMeshNode::Initialise(void) +{ + if (!MeshNode::Initialise()) + { + return false; + } + return true; +} + +XMMATRIX ControlledMeshNode::GetWorldTransformation() const +{ + return XMLoadFloat4x4(&_combinedWorldTransformation); +} \ No newline at end of file diff --git a/Graphics2/ControlledMeshNode.h b/Graphics2/ControlledMeshNode.h new file mode 100644 index 0000000..93c131f --- /dev/null +++ b/Graphics2/ControlledMeshNode.h @@ -0,0 +1,18 @@ +#pragma once +#include "ObjectNode.h" +#include "MeshNode.h" + +class ControlledMeshNode : public MeshNode, public ObjectNode +{ +public: + ControlledMeshNode(wstring name, wstring modelName); + + void Update(FXMMATRIX& currentWorldTransformation); + bool Initialise(void); + + XMMATRIX GetWorldTransformation() const; + +private: + +}; + diff --git a/Graphics2/ControlledSplitMeshNode.cpp b/Graphics2/ControlledSplitMeshNode.cpp new file mode 100644 index 0000000..c75eda1 --- /dev/null +++ b/Graphics2/ControlledSplitMeshNode.cpp @@ -0,0 +1,25 @@ +#include "ControlledSplitMeshNode.h" + +ControlledSplitMeshNode::ControlledSplitMeshNode(wstring name, wstring modelName) : SplitMeshNode(name, modelName), ObjectNode() +{ +} + +void ControlledSplitMeshNode::Update(FXMMATRIX& currentWorldTransformation) +{ + ObjectNode::Update(_worldTransformation); + SceneGraph::Update(currentWorldTransformation); +} + +bool ControlledSplitMeshNode::Initialise(void) +{ + if (!SplitMeshNode::Initialise()) + { + return false; + } + return true; +} + +XMMATRIX ControlledSplitMeshNode::GetWorldTransformation() const +{ + return XMLoadFloat4x4(&_combinedWorldTransformation); +} \ No newline at end of file diff --git a/Graphics2/ControlledSplitMeshNode.h b/Graphics2/ControlledSplitMeshNode.h new file mode 100644 index 0000000..a9ad32a --- /dev/null +++ b/Graphics2/ControlledSplitMeshNode.h @@ -0,0 +1,20 @@ +#pragma once +#include "DirectXFramework.h" +#include "SplitMeshNode.h" +#include "ObjectNode.h" +#include "SubMeshNode.h" + +class ControlledSplitMeshNode : public SplitMeshNode, public ObjectNode +{ +public: + ControlledSplitMeshNode(wstring name, wstring modelName); + + void Update(FXMMATRIX& currentWorldTransformation); + bool Initialise(void); + + XMMATRIX GetWorldTransformation() const; + +private: + +}; + diff --git a/Graphics2/DirectXFramework.cpp b/Graphics2/DirectXFramework.cpp index 963d3f9..24b95ae 100644 --- a/Graphics2/DirectXFramework.cpp +++ b/Graphics2/DirectXFramework.cpp @@ -67,6 +67,7 @@ bool DirectXFramework::Initialise() _resourceManager = make_shared(); _sceneGraph = make_shared(); _camera = make_shared(); + _globalLighting = make_shared(); CreateSceneGraph(); return _sceneGraph->Initialise(); diff --git a/Graphics2/DirectXFramework.h b/Graphics2/DirectXFramework.h index 8a5a156..bb74d13 100644 --- a/Graphics2/DirectXFramework.h +++ b/Graphics2/DirectXFramework.h @@ -5,6 +5,7 @@ #include "ResourceManager.h" #include "SceneGraph.h" #include "Camera.h" +#include "GlobalLighting.h" class DirectXFramework : public Framework { @@ -34,6 +35,7 @@ public: void SetBackgroundColour(XMFLOAT4 backgroundColour); inline shared_ptr GetCamera() { return _camera; } + inline shared_ptr GetGlobalLighting() { return _globalLighting; } private: ComPtr _device; @@ -60,5 +62,6 @@ private: shared_ptr _resourceManager; shared_ptr _camera; + shared_ptr _globalLighting; }; diff --git a/Graphics2/GamePadController.cpp b/Graphics2/GamePadController.cpp index d93ed2a..9a3753f 100644 --- a/Graphics2/GamePadController.cpp +++ b/Graphics2/GamePadController.cpp @@ -11,7 +11,7 @@ GamePadController::~GamePadController(void) { } -void GamePadController::ProcessGameController() +void GamePadController::ProcessGameController(set& currentInputs, bool &boostHit) { DWORD magnitudeSquared; @@ -40,11 +40,29 @@ void GamePadController::ProcessGameController() // check if the controller is inside a circular dead zone. We do it this way to avoid having to // take the square root of the magnitude above. if (magnitudeSquared <= _leftThumbDeadZoneSquared) - { + { thumbLX = 0; thumbLY = 0; } + if (thumbLY > 0) + { + currentInputs.insert(ControlInputs::Forward); + } + else if (thumbLY < 0) + { + currentInputs.insert(ControlInputs::Back); + } + + if (thumbLX > 0) + { + currentInputs.insert(ControlInputs::StrafeRight); + } + else if (thumbLX < 0) + { + currentInputs.insert(ControlInputs::StrafeLeft); + } + // Deal with the right thumb stick SHORT thumbRX = _controllerState.Gamepad.sThumbRX; SHORT thumbRY = _controllerState.Gamepad.sThumbRY; @@ -59,36 +77,64 @@ void GamePadController::ProcessGameController() thumbRY = 0; } + if (thumbRY > 0) + { + currentInputs.insert(ControlInputs::Up); + } + else if (thumbRY < 0) + { + currentInputs.insert(ControlInputs::Down); + } + + if (thumbRX > 0) + { + currentInputs.insert(ControlInputs::TurnRight); + } + else if (thumbRX < 0) + { + currentInputs.insert(ControlInputs::TurnLeft); + } + // Check left and right triggers BYTE leftTrigger = _controllerState.Gamepad.bLeftTrigger; if (leftTrigger <= XINPUT_GAMEPAD_TRIGGER_THRESHOLD) - { + { leftTrigger = 0; } + if (leftTrigger > 0) + { + boostHit = true; + } + BYTE rightTrigger = _controllerState.Gamepad.bRightTrigger; if (rightTrigger <= XINPUT_GAMEPAD_TRIGGER_THRESHOLD) - { + { rightTrigger = 0; } + if (rightTrigger) + { + currentInputs.insert(ControlInputs::Fire2); + } + // Test the different digital buttons WORD buttons = _controllerState.Gamepad.wButtons; if (buttons & XINPUT_GAMEPAD_DPAD_UP) { - // Directional pad up pressed + currentInputs.insert(ControlInputs::Forward); } if (buttons & XINPUT_GAMEPAD_DPAD_DOWN) { - // Directional pad down pressed + currentInputs.insert(ControlInputs::Back); } if (buttons & XINPUT_GAMEPAD_DPAD_LEFT) { - // Directional pad left pressed + currentInputs.insert(ControlInputs::TurnLeft); } if (buttons & XINPUT_GAMEPAD_DPAD_RIGHT) { - // Directional pad right pressed + currentInputs.insert(ControlInputs::TurnRight); } // Other button mask values that can be used are: diff --git a/Graphics2/GamePadController.h b/Graphics2/GamePadController.h index 3c18b06..cde0062 100644 --- a/Graphics2/GamePadController.h +++ b/Graphics2/GamePadController.h @@ -1,15 +1,18 @@ #pragma once +#include #include "Core.h" #include "DirectXCore.h" #include #pragma comment(lib, "XInput.lib") +enum class ControlInputs { Forward, Back, TurnLeft, TurnRight, StrafeLeft, StrafeRight, Up, Down, Fire1, Fire2 }; + class GamePadController { public: GamePadController(); ~GamePadController(); - void ProcessGameController(); + void ProcessGameController(set& currentInputs, bool &boostHit); private: XINPUT_STATE _controllerState; diff --git a/Graphics2/GlobalLighting.cpp b/Graphics2/GlobalLighting.cpp new file mode 100644 index 0000000..768ccf9 --- /dev/null +++ b/Graphics2/GlobalLighting.cpp @@ -0,0 +1,38 @@ +#include "GlobalLighting.h" + +GlobalLighting::GlobalLighting() +{ + _ambientLight = XMFLOAT4(0.0f, 0.0f, 0.0f, 0.0f); + _directionalLightVector = XMVectorSet(0.0f, 0.0f, 0.0f, 0.0f); + _directionalLightColor = XMFLOAT4(0.0f, 0.0f, 0.0f, 0.0f); +} + +GlobalLighting::~GlobalLighting() +{ +} + +void GlobalLighting::SetAmbientLight(XMFLOAT4 ambientLight) +{ + _ambientLight = ambientLight; +} + +XMFLOAT4 GlobalLighting::GetAmbientLight() const +{ + return _ambientLight; +} + +void GlobalLighting::SetDirectionalLight(FXMVECTOR direction, XMFLOAT4 lightColor) +{ + _directionalLightVector = direction; + _directionalLightColor = lightColor; +} + +XMVECTOR GlobalLighting::GetDirectionalLightDirection() const +{ + return _directionalLightVector; +} + +XMFLOAT4 GlobalLighting::GetDirectionalLightColor() const +{ + return _directionalLightColor; +} \ No newline at end of file diff --git a/Graphics2/GlobalLighting.h b/Graphics2/GlobalLighting.h new file mode 100644 index 0000000..6f65272 --- /dev/null +++ b/Graphics2/GlobalLighting.h @@ -0,0 +1,21 @@ +#pragma once +#include "DirectXCore.h" + +class GlobalLighting +{ +public: + GlobalLighting(); + ~GlobalLighting(); + + void SetAmbientLight(XMFLOAT4 ambientLight); + XMFLOAT4 GetAmbientLight() const; + void SetDirectionalLight(FXMVECTOR direction, XMFLOAT4 lightColor); + XMVECTOR GetDirectionalLightDirection() const; + XMFLOAT4 GetDirectionalLightColor() const; + + +private: + XMFLOAT4 _ambientLight; + XMVECTOR _directionalLightVector; + XMFLOAT4 _directionalLightColor; +}; \ No newline at end of file diff --git a/Graphics2/Graphics2.cpp b/Graphics2/Graphics2.cpp index 8688572..881b0f7 100644 --- a/Graphics2/Graphics2.cpp +++ b/Graphics2/Graphics2.cpp @@ -4,32 +4,65 @@ Graphics2 app; void Graphics2::CreateSceneGraph() { - _boostMultiplier = 1; + _boostMultiplier = _boostMin; _flySpeed = 1; _turnSpeed = 1; _invertPitch = -1; - GetCamera()->SetCameraPosition(0.0f, 550.0f, -80.0f); + _currentController = GamePadController(); + _currentPlayerObject = nullptr; + + GetCamera()->SetCameraPosition(0.0f, 550.0f, -80.0f); SceneGraphPointer sceneGraph = GetSceneGraph(); // This is where you add nodes to the scene graph //shared_ptr cube = make_shared(L"Body", L"Textures\\woodbox.bmp"); //cube->SetWorldTransform(XMMatrixScaling(5.0f, 8.0f, 2.5f) * XMMatrixTranslation(0, 23.0f, 0)); //sceneGraph->Add(cube); + + DirectXFramework::GetDXFramework()->GetGlobalLighting()->SetAmbientLight(XMFLOAT4(0.7f, 0.7f, 0.7f, 1.0f)); + DirectXFramework::GetDXFramework()->GetGlobalLighting()->SetDirectionalLight(XMVectorSet(0.5f, -1.0f, -1.0f, 0.0f), XMFLOAT4(0.5f, 0.5f, 0.5f, 1.0f)); + + shared_ptr skyDome = make_shared(L"SkyDome", L"Textures\\SkyWater.dds", 30.0f); + sceneGraph->Add(skyDome); - shared_ptr terrainNode = make_shared(L"MainTerrain", L"Textures\\Example_HeightMap.raw", L"lovelycat"); - terrainNode->SetAmbientLight(XMFLOAT4(0.7f, 0.7f, 0.7f, 1.0f)); - terrainNode->SetDirectionalLight(XMVectorSet(0.5f, -1.0f, -1.0f, 0.0f), XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f)); - terrainNode->SetWaterColor(XMFLOAT4(SharedMethods::RGBValueToIntensity(0xA4), SharedMethods::RGBValueToIntensity(0xC1), SharedMethods::RGBValueToIntensity(0xF9), 1.0f)); + //shared_ptr terrainNode = make_shared(L"MainTerrain", L"Textures\\Example_HeightMap.raw", L"RandomWords"); + shared_ptr terrainNode = make_shared(L"MainTerrain", L"LovelyCat", 10.0f, 20.0f, 1.0f, 1); + terrainNode->SetAmbientLight(DirectXFramework::GetDXFramework()->GetGlobalLighting()->GetAmbientLight()); + terrainNode->SetDirectionalLight(DirectXFramework::GetDXFramework()->GetGlobalLighting()->GetDirectionalLightDirection(), DirectXFramework::GetDXFramework()->GetGlobalLighting()->GetDirectionalLightColor()); + terrainNode->SetWaterColor(XMFLOAT4(SharedMethods::RGBValueToIntensity(0x84), SharedMethods::RGBValueToIntensity(0xC1), SharedMethods::RGBValueToIntensity(0xF9), 1.0f)); //terrainNode->SetWaterColor(XMFLOAT4(1.0f, 0.0f, 0.8f, 1.0f)); //terrainNode->SetWaterColor(XMFLOAT4(0.0f, 0.0f, 1.0f, 1.0f)); sceneGraph->Add(terrainNode); - shared_ptr node = make_shared(L"Plane1", L"Models\\Plane\\Bonanza.3DS"); - //shared_ptr node = make_shared(L"Plane1", L"Models\\Plane\\Bonanza.3DS"); - node->SetWorldTransform(XMMatrixTranslation(-30.0f, 520.0f, 0)); - sceneGraph->Add(node); + shared_ptr treeGroupA = make_shared(L"TreeGroupA"); + + shared_ptr treeNode1 = make_shared(L"Tree1", L"Models\\Tree\\Tree1.3ds"); + treeNode1->SetWorldTransform(XMMatrixScaling(0.005f, 0.01f, 0.005f) * XMMatrixRotationAxis(XMVectorSet(1.0f, 0.0f, 1.0f, 0.0f), 0.1f * XM_PI) * XMMatrixTranslation(0.0f, 320.0f, 250.0f)); + treeGroupA->Add(treeNode1); + + shared_ptr treeNode2 = make_shared(L"Tree2", L"Models\\Tree\\Tree1.3ds"); + treeNode2->SetWorldTransform(XMMatrixScaling(0.002f, 0.002f, 0.002f) * XMMatrixTranslation(-150.0f, 380.0f, 150.0f)); + treeGroupA->Add(treeNode2); + + shared_ptr treeNode3 = make_shared(L"Tree3", L"Models\\Tree\\Tree1.3ds"); + treeNode3->SetWorldTransform(XMMatrixScaling(0.005f, 0.005f, 0.005f) * XMMatrixRotationAxis(XMVectorSet(1.0f, 0.0f, 1.0f, 0.0f), -0.1f * XM_PI) * XMMatrixTranslation(100.0f, 290.0f, 350.0f)); + treeGroupA->Add(treeNode3); + + shared_ptr treeNode4 = make_shared(L"Tree4", L"Models\\Tree\\Tree1.3ds"); + treeNode4->SetWorldTransform(XMMatrixScaling(0.005f, 0.01f, 0.005f) * XMMatrixRotationAxis(XMVectorSet(1.0f, 0.0f, 1.0f, 0.0f), 0.1f * XM_PI) * XMMatrixTranslation(0.0f, 320.0f, 250.0f)); + treeGroupA->Add(treeNode4); + + sceneGraph->Add(treeGroupA); + + shared_ptr plane1Node = make_shared(L"Plane1", L"Models\\Plane\\Bonanza.3DS"); + plane1Node->SetStartOrientation(XMMatrixRotationAxis(XMVectorSet(0.0f, 0.0f, 1.0f, 0.0f), XM_PI) * XMMatrixRotationAxis(XMVectorSet(1.0f, 0.0f, 0.0f, 0.0f), 0.5f * XM_PI)); + plane1Node->SetNodePosition(0.0f, 550.0f, -50.0f); + sceneGraph->Add(plane1Node); + + //_currentPlayerObject = plane1Node; + //GetCamera()->SetFollowNode(plane1Node, XMFLOAT3(0.0f, 30.0f, -80.0f), false); SetBackgroundColour(XMFLOAT4(0.29f, 0.38f, 0.72f, 1.0f)); //SetBackgroundColour(XMFLOAT4(SharedMethods::RGBValueToIntensity(0x89), 0, 1, 1)); @@ -44,47 +77,103 @@ void Graphics2::UpdateSceneGraph() GetCurrentControlInputs(); SceneGraphPointer sceneGraph = GetSceneGraph(); + XMVECTOR startCameraPos = GetCamera()->GetCameraPosition(); + if (_currentPlayerObject != nullptr) + { + _currentPlayerObject->SetForwardBack(_flySpeed * _boostMultiplier); + } + for (ControlInputs currentControl : _currentInputs) { switch (currentControl) { case ControlInputs::Forward: - GetCamera()->SetForwardBack(_flySpeed * _boostMultiplier); + if (_currentPlayerObject == nullptr) + { + GetCamera()->SetForwardBack(_flySpeed * _boostMultiplier); + } break; case ControlInputs::Back: - GetCamera()->SetForwardBack(-_flySpeed * _boostMultiplier); + if (_currentPlayerObject == nullptr) + { + GetCamera()->SetForwardBack(-_flySpeed * _boostMultiplier); + } break; case ControlInputs::StrafeLeft: - GetCamera()->SetLeftRight(-_flySpeed * _boostMultiplier); + if (_currentPlayerObject != nullptr) + { + _currentPlayerObject->SetLeftRight(-_flySpeed * _boostMultiplier); + } + else + { + GetCamera()->SetLeftRight(-_flySpeed * _boostMultiplier); + } break; case ControlInputs::StrafeRight: - GetCamera()->SetLeftRight(_flySpeed * _boostMultiplier); + if (_currentPlayerObject != nullptr) + { + _currentPlayerObject->SetLeftRight(_flySpeed * _boostMultiplier); + } + else + { + GetCamera()->SetLeftRight(_flySpeed * _boostMultiplier); + } break; case ControlInputs::TurnLeft: - GetCamera()->SetYaw(-_turnSpeed); + if (_currentPlayerObject != nullptr) + { + _currentPlayerObject->SetYaw(-_turnSpeed); + } + else + { + GetCamera()->SetYaw(-_turnSpeed); + } break; case ControlInputs::TurnRight: - GetCamera()->SetYaw(_turnSpeed); + if (_currentPlayerObject != nullptr) + { + _currentPlayerObject->SetYaw(_turnSpeed); + } + else + { + GetCamera()->SetYaw(_turnSpeed); + } break; case ControlInputs::Up: - GetCamera()->SetPitch(_turnSpeed * _invertPitch); + if (_currentPlayerObject != nullptr) + { + _currentPlayerObject->SetPitch(_turnSpeed * _invertPitch); + } + else + { + GetCamera()->SetPitch(_turnSpeed * _invertPitch); + } break; case ControlInputs::Down: - GetCamera()->SetPitch(-_turnSpeed * _invertPitch); + if (_currentPlayerObject != nullptr) + { + _currentPlayerObject->SetPitch(-_turnSpeed * _invertPitch); + } + else + { + GetCamera()->SetPitch(-_turnSpeed * _invertPitch); + } break; } } - SceneNodePointer plane1 = sceneGraph->Find(L"Plane1"); + shared_ptr plane1 = dynamic_pointer_cast(sceneGraph->Find(L"Plane1")); - plane1->GetFirstChild()->SetWorldTransform(SharedMethods::RotateFromPoint(-60.0f, 0, 0, XMMatrixRotationAxis(XMVectorSet(0.0f, 0.0f, 1.0f, 0.0f), _currentRotation * XM_PI / 180.0f))); - plane1 ->GetFirstChild()->AddToWorldTransform(XMMatrixRotationAxis(XMVectorSet(1.0f, 0.0f, 0.0f, 0.0f), 90.0f * XM_PI / 180.0f)); - //sceneGraph->Find(L"Plane1")->GetFirstChild()->GetFirstChild()->SetWorldTransform(XMMatrixRotationAxis(XMVectorSet(0.0f, -1.0f, -1.0f, 0.0f), _currentSideRotation * XM_PI / 180.0f)); + if (plane1 != nullptr) + { + //plane1->SetWorldTransform(SharedMethods::RotateFromPoint(-60.0f, 0, 0, XMMatrixRotationAxis(XMVectorSet(0.0f, 0.0f, 1.0f, 0.0f), _currentRotation * XM_PI / 180.0f))); + //plane1->AddToWorldTransform(XMMatrixRotationAxis(XMVectorSet(1.0f, 0.0f, 0.0f, 0.0f), 90.0f * XM_PI / 180.0f)); + //sceneGraph->Find(L"Plane1")->GetFirstChild()->GetFirstChild()->SetWorldTransform(XMMatrixRotationAxis(XMVectorSet(0.0f, -1.0f, -1.0f, 0.0f), _currentSideRotation * XM_PI / 180.0f)); - //sceneGraph->Find(L"Plane1")->Update((SharedMethods::RotateFromPoint(30.0f, -20.0f, 0, XMMatrixRotationAxis(XMVectorSet(0.0f, 0.0f, 1.0f, 0.0f), _currentSideRotation * XM_PI / 180.0f))) * XMMatrixRotationAxis(XMVectorSet(0.0f, -1.0f, 0.0f, 0.0f), _currentRotation * XM_PI / 180.0f)); - - plane1->Find(L"airscrew")->SetWorldTransform(SharedMethods::RotateFromPoint(0.0f, 15.471f, 14.5f, XMMatrixRotationAxis(XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f), _currentPropRotation * XM_PI / 180.0f))); + //sceneGraph->Find(L"Plane1")->Update((SharedMethods::RotateFromPoint(30.0f, -20.0f, 0, XMMatrixRotationAxis(XMVectorSet(0.0f, 0.0f, 1.0f, 0.0f), _currentSideRotation * XM_PI / 180.0f))) * XMMatrixRotationAxis(XMVectorSet(0.0f, -1.0f, 0.0f, 0.0f), _currentRotation * XM_PI / 180.0f)); + plane1->Find(L"airscrew")->SetWorldTransform(SharedMethods::RotateFromPoint(0.0f, 15.471f, 14.5f, XMMatrixRotationAxis(XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f), _currentPropRotation * XM_PI / 180.0f))); + } if (_currentRotation == 360) { @@ -99,6 +188,61 @@ void Graphics2::UpdateSceneGraph() _currentPropRotation += 100; } + // Check the camera and our terrain boundaries + XMVECTOR currentCameraPos = GetCamera()->GetCameraPosition(); + shared_ptr mainTerrain = dynamic_pointer_cast(sceneGraph->Find(L"MainTerrain")); + GetCamera()->Update(); + if (mainTerrain != nullptr) + { + bool boundaryHit = false; + XMFLOAT4 cameraOffset = XMFLOAT4(XMVectorGetX(startCameraPos), XMVectorGetY(startCameraPos), XMVectorGetZ(startCameraPos), 0.0f); + + if (XMVectorGetY(currentCameraPos) < mainTerrain->GetHeightAtPoint(XMVectorGetX(currentCameraPos), XMVectorGetZ(currentCameraPos), true) + 4.0f) + { + cameraOffset.y = cameraOffset.y + 4.0f; + boundaryHit = true; + } + + float currentCameraXPos = XMVectorGetX(currentCameraPos); + float xOffset = 150.0f; + if (currentCameraXPos > 0) + { + xOffset = -xOffset; + } + + float currentCameraZPos = XMVectorGetZ(currentCameraPos); + float zOffset = 150.0f; + if (currentCameraZPos > 0) + { + zOffset = -zOffset; + } + + if (!mainTerrain->CheckXBoundary(currentCameraXPos + -xOffset)) + { + cameraOffset.x = cameraOffset.x + xOffset; + boundaryHit = true; + } + + if (!mainTerrain->CheckZBoundary(currentCameraZPos + -zOffset)) + { + cameraOffset.z = cameraOffset.z + zOffset; + boundaryHit = true; + } + + if (boundaryHit) + { + if (_currentPlayerObject != nullptr) + { + _currentPlayerObject->SetNodePosition(cameraOffset); + } + else + { + GetCamera()->SetCameraPosition(cameraOffset); + } + } + } + + // Reset the control array ready for the next frames input ResetCurrentControlInputs(); } @@ -107,61 +251,67 @@ void Graphics2::GetCurrentControlInputs() // Check if the window has focus before accepting any keypresses if (GetForegroundWindow() == Framework::GetHWnd()) { - if (GetAsyncKeyState(VK_SHIFT)) + + // Check if any connected controllers have inputs + bool boostHit = false; + _currentController.ProcessGameController(_currentInputs, boostHit); + + if (GetAsyncKeyState(VK_SHIFT) || boostHit) { - _boostMultiplier = 2; + _currentInputs.insert(ControlInputs::Fire1); + _boostMultiplier = SharedMethods::Clamp(_boostMultiplier + _boostStep, 1, _boostMax); } else { - _boostMultiplier = 1; + _boostMultiplier = SharedMethods::Clamp(_boostMultiplier - _boostStep, 1, _boostMax); } // Forward if (GetAsyncKeyState(0x57)) { - _currentInputs.push_back(ControlInputs::Forward); + _currentInputs.insert(ControlInputs::Forward); } // Back if (GetAsyncKeyState(0x53)) { - _currentInputs.push_back(ControlInputs::Back); + _currentInputs.insert(ControlInputs::Back); } // Turn Left if (GetAsyncKeyState(0x41)) { - _currentInputs.push_back(ControlInputs::TurnLeft); + _currentInputs.insert(ControlInputs::TurnLeft); } // Turn Right if (GetAsyncKeyState(0x44)) { - _currentInputs.push_back(ControlInputs::TurnRight); + _currentInputs.insert(ControlInputs::TurnRight); } // Strafe Left if (GetAsyncKeyState(0x51)) { - _currentInputs.push_back(ControlInputs::StrafeLeft); + _currentInputs.insert(ControlInputs::StrafeLeft); } // Strafe Right if (GetAsyncKeyState(0x45)) { - _currentInputs.push_back(ControlInputs::StrafeRight); + _currentInputs.insert(ControlInputs::StrafeRight); } // "Jump" if (GetAsyncKeyState(VK_SPACE)) { - _currentInputs.push_back(ControlInputs::Up); + _currentInputs.insert(ControlInputs::Up); } // "Crouch" if (GetAsyncKeyState(VK_CONTROL)) { - _currentInputs.push_back(ControlInputs::Down); + _currentInputs.insert(ControlInputs::Down); } } } diff --git a/Graphics2/Graphics2.h b/Graphics2/Graphics2.h index 2f00066..59b89b1 100644 --- a/Graphics2/Graphics2.h +++ b/Graphics2/Graphics2.h @@ -1,13 +1,16 @@ #pragma once #include "DirectXFramework.h" #include "SharedMethods.h" +#include "GamePadController.h" #include "TexturedCubeNode.h" #include "MeshNode.h" #include "SplitMeshNode.h" -#include "TerrainNode.h" +#include "ControlledSplitMeshNode.h" +#include "HeightMapTerrainNode.h" +#include "PerlinTerrainNode.h" +#include "SkyNode.h" #include - -enum class ControlInputs {Forward, Back, TurnLeft, TurnRight, StrafeLeft, StrafeRight, Up, Down, Fire1, Fire2}; +#include class Graphics2 : public DirectXFramework { @@ -16,19 +19,26 @@ public: void UpdateSceneGraph(); private: - bool _boosting; - float _boostMultiplier; + bool _boosting = false; + float _boostMultiplier = 1; + float _boostMin = 1; + float _boostStep = 0.5f; + float _boostMax = 5.0f; float _flySpeed; float _turnSpeed; int _invertPitch; - float _currentRotation = 0.0f; float _currentSideRotation = 0.0f; float _currentPropRotation = 0.0f; - vector _currentInputs; + GamePadController _currentController; + + // Changed from a vector to a set because sets only allow for unique values and thats all i want + set _currentInputs; + + shared_ptr _currentPlayerObject; void GetCurrentControlInputs(); void ResetCurrentControlInputs(); diff --git a/Graphics2/Graphics2.vcxproj b/Graphics2/Graphics2.vcxproj index 852ada0..a5269dd 100644 --- a/Graphics2/Graphics2.vcxproj +++ b/Graphics2/Graphics2.vcxproj @@ -82,6 +82,7 @@ false + $(VC_IncludePath);$(WindowsSDK_IncludePath);..\Assimp\include;$(IncludePath); @@ -128,7 +129,7 @@ - Use + NotUsing Level3 MaxSpeed true @@ -146,18 +147,22 @@ + + + + @@ -165,6 +170,7 @@ + @@ -188,19 +194,24 @@ + + + + + @@ -232,6 +243,11 @@ Document + + + Document + + diff --git a/Graphics2/Graphics2.vcxproj.filters b/Graphics2/Graphics2.vcxproj.filters index d9467f8..b31986b 100644 --- a/Graphics2/Graphics2.vcxproj.filters +++ b/Graphics2/Graphics2.vcxproj.filters @@ -102,6 +102,21 @@ Header Files + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + @@ -195,6 +210,21 @@ Source Files + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + @@ -209,6 +239,9 @@ Shaders + + Shaders + diff --git a/Graphics2/HeightMapTerrainNode.cpp b/Graphics2/HeightMapTerrainNode.cpp new file mode 100644 index 0000000..9ae9502 --- /dev/null +++ b/Graphics2/HeightMapTerrainNode.cpp @@ -0,0 +1,36 @@ +#include "HeightMapTerrainNode.h" + +#define WORLD_HEIGHT 1024 + +HeightMapTerrainNode::HeightMapTerrainNode(wstring name, wstring heightMap, wstring seed, float waterHeight, int widthX, int widthZ, int cellSizeX, int cellSizeZ) : TerrainNode(name, seed, waterHeight, widthX, widthZ, cellSizeX, cellSizeZ) +{ + _heightMap = heightMap; + if (!LoadHeightMap(_heightMap)) + { + _initError = true; + } +} + +bool HeightMapTerrainNode::LoadHeightMap(wstring heightMapFilename) +{ + unsigned int mapSize = _gridCols * _gridRows; + USHORT* rawFileValues = new USHORT[mapSize]; + + std::ifstream inputHeightMap; + inputHeightMap.open(heightMapFilename.c_str(), std::ios_base::binary); + if (!inputHeightMap) + { + return false; + } + + inputHeightMap.read((char*)rawFileValues, mapSize * 2); + inputHeightMap.close(); + + // Normalise BYTE values to the range 0.0f - 1.0f; + for (unsigned int i = 0; i < mapSize; i++) + { + _heightValues.push_back((float)rawFileValues[i] / 65536); + } + delete[] rawFileValues; + return true; +} diff --git a/Graphics2/HeightMapTerrainNode.h b/Graphics2/HeightMapTerrainNode.h new file mode 100644 index 0000000..3bd001f --- /dev/null +++ b/Graphics2/HeightMapTerrainNode.h @@ -0,0 +1,16 @@ +#pragma once +#include "DirectXFramework.h" +#include "SharedMethods.h" +#include "TerrainNode.h" + +class HeightMapTerrainNode : public TerrainNode +{ +public: + HeightMapTerrainNode(wstring name, wstring heightMap, wstring seed, float waterHeight = 150.0f, int widthX = 1023, int widthZ = 1023, int cellSizeX = 10, int cellSizeZ = 10); + +private: + wstring _heightMap; + + bool LoadHeightMap(wstring heightMapFilename); +}; + diff --git a/Graphics2/MeshNode.cpp b/Graphics2/MeshNode.cpp index d565333..cd76387 100644 --- a/Graphics2/MeshNode.cpp +++ b/Graphics2/MeshNode.cpp @@ -21,9 +21,8 @@ void MeshNode::Render() { _renderer->SetMesh(_mesh); _renderer->SetWorldTransformation(XMLoadFloat4x4(&_combinedWorldTransformation)); - _renderer->SetCameraPosition(DirectXFramework::GetDXFramework()->GetCamera()->GetRawCameraPosition()); - _renderer->SetAmbientLight(XMFLOAT4(0.5f, 0.5f, 0.5f, 1.0f)); - _renderer->SetDirectionalLight(XMVectorSet(0.0f, -1.0f, 1.0f, 0.0f), XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f)); + _renderer->SetAmbientLight(DirectXFramework::GetDXFramework()->GetGlobalLighting()->GetAmbientLight()); + _renderer->SetDirectionalLight(DirectXFramework::GetDXFramework()->GetGlobalLighting()->GetDirectionalLightDirection(), DirectXFramework::GetDXFramework()->GetGlobalLighting()->GetDirectionalLightColor()); _renderer->Render(); } diff --git a/Graphics2/MeshRenderer.cpp b/Graphics2/MeshRenderer.cpp index 178800e..5127c8f 100644 --- a/Graphics2/MeshRenderer.cpp +++ b/Graphics2/MeshRenderer.cpp @@ -101,7 +101,7 @@ void MeshRenderer::Render() _cBuffer.ambientColor = _ambientLight; _cBuffer.lightVector = XMVector4Normalize(XMLoadFloat4(&_directionalLightVector)); _cBuffer.lightColor = _directionalLightColour; - _cBuffer.cameraPosition = _cameraPosition; + XMStoreFloat4(&_cBuffer.cameraPosition, DirectXFramework::GetDXFramework()->GetCamera()->GetCameraPosition()); _deviceContext->VSSetShader(_vertexShader.Get(), 0, 0); _deviceContext->PSSetShader(_pixelShader.Get(), 0, 0); diff --git a/Graphics2/Models/Tree/COLOR.JPG b/Graphics2/Models/Tree/COLOR.JPG new file mode 100644 index 0000000000000000000000000000000000000000..cea16aebac013d98dc4766a93f279dbeee48d89d GIT binary patch literal 137254 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%0ABuK@a~~}PtVJbIZGx;YBgRVmHuaXO^KU!D@64h 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