diff --git a/include/Core/Engine.h b/include/Core/Engine.h index 71340d6..8346eb0 100755 --- a/include/Core/Engine.h +++ b/include/Core/Engine.h @@ -603,7 +603,7 @@ public: m_ShakeIntensity = m_ShakeRepresentativeIntensity; if (m_ShakeIntensity <= 0) { m_ScreenShake = false; - m_Renderer->PlaceCamera(glm::vec3(0, 0, 0)); + //m_Renderer->PlaceCamera(glm::vec3(0, 0, 0)); return; } } else { @@ -619,7 +619,7 @@ public: //std::cout << "X: " << randomX << " Y: " << randomY << std::endl; - m_Renderer->PlaceCamera(glm::vec3(randomX, randomY, 0)); + //m_Renderer->PlaceCamera(glm::vec3(randomX, randomY, 0)); } } diff --git a/include/Rendering/Camera.h b/include/Rendering/Camera.h index 28fe340..e2c404a 100644 --- a/include/Rendering/Camera.h +++ b/include/Rendering/Camera.h @@ -65,15 +65,15 @@ public: float FarClip() const { return m_FarClip; } void SetFarClip(float val); -private: - void UpdateViewMatrix(); - void UpdateProjectionMatrix(); - float m_AspectRatio; float m_FOV; float m_NearClip; float m_FarClip; +private: + void UpdateViewMatrix(); + void UpdateProjectionMatrix(); + glm::vec3 m_Position; glm::quat m_Orientation; diff --git a/include/Rendering/DirectX/Rendering/Renderer.h b/include/Rendering/DirectX/Rendering/Renderer.h index 9c495b6..9362251 100644 --- a/include/Rendering/DirectX/Rendering/Renderer.h +++ b/include/Rendering/DirectX/Rendering/Renderer.h @@ -60,7 +60,6 @@ private: } constantBufferStruct; ShaderProgram* shaderProgram = nullptr; - const Model* testModel = nullptr; ID3D11Buffer* constantBuffer = nullptr; static DirectX::SimpleMath::Matrix GLMtoDXModelView(glm::mat4 m); diff --git a/include/Rendering/RawModel.h b/include/Rendering/RawModel.h index 9e078c0..624c5a0 100644 --- a/include/Rendering/RawModel.h +++ b/include/Rendering/RawModel.h @@ -80,6 +80,7 @@ public: std::vector m_Vertices; std::vector m_Indices; Skeleton* m_Skeleton = nullptr; + glm::mat4 m_Matrix; private: std::vector BoneIndices; diff --git a/include/Rendering/RenderQueue.h b/include/Rendering/RenderQueue.h index e9b1ff4..5dcd030 100644 --- a/include/Rendering/RenderQueue.h +++ b/include/Rendering/RenderQueue.h @@ -28,6 +28,7 @@ namespace dd { class Model; +class Skeleton; class Texture; class RenderQueue; @@ -63,6 +64,12 @@ struct ModelJob : RenderJob unsigned int StartIndex = 0; unsigned int EndIndex = 0; + // Animation + dd::Skeleton* Skeleton = nullptr; + bool NoRootMotion = true; + std::string AnimationName; + double AnimationTime = 0; + void CalculateHash() override { Hash = TextureID; diff --git a/src/game/Rendering/DirectX/Renderer.cpp b/src/game/Rendering/DirectX/Renderer.cpp index f837e3d..f587047 100644 --- a/src/game/Rendering/DirectX/Renderer.cpp +++ b/src/game/Rendering/DirectX/Renderer.cpp @@ -2,6 +2,7 @@ #include "Rendering/Renderer.h" #include "Rendering/Model.h" +#include "Rendering/Skeleton.h" #include "Rendering/ShaderProgram.h" void dd::Renderer::Initialize() @@ -108,9 +109,6 @@ void dd::Renderer::Initialize() viewport.MaxDepth = 1; m_DeviceContext->RSSetViewports(1, &viewport); - - testModel = ResourceManager::Load("Models/Ship/Ship.obj"); - shaderProgram = new ShaderProgram(); shaderProgram->CompileVertexShader(L"vertex.hlsl"); shaderProgram->CompilePixelShader(L"pixel.hlsl"); @@ -118,7 +116,14 @@ void dd::Renderer::Initialize() {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, {"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, {"TANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, - {"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, sizeof(glm::vec3) * 4, D3D11_INPUT_PER_VERTEX_DATA, 0}, + {"TANGENT", 1, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, + {"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, + {"COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, + {"COLOR", 1, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, + {"BLENDINDICES", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, + {"BLENDINDICES", 1, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, + {"BLENDWEIGHT", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, + {"BLENDWEIGHT", 1, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, }; shaderProgram->CreateInputLayout(VertexIED, sizeof(VertexIED) / sizeof(VertexIED[0])); shaderProgram->Bind(); diff --git a/src/game/Rendering/DirectX/ShaderProgram.cpp b/src/game/Rendering/DirectX/ShaderProgram.cpp index cc45330..0b7c4db 100644 --- a/src/game/Rendering/DirectX/ShaderProgram.cpp +++ b/src/game/Rendering/DirectX/ShaderProgram.cpp @@ -28,7 +28,7 @@ void dd::ShaderProgram::CompileVertexShader(std::wstring filename) { //D3DX11CompileFromFile(filename.c_str(), 0, 0, "main", "vs_5_0", 0, 0, 0, &m_VertexShaderBlob, 0, 0); ID3DBlob* blob = nullptr; - HRESULT result = D3DCompileFromFile(filename.c_str(), nullptr, nullptr, "main", "vs_5_0", 0, 0, &m_VertexShaderBlob, nullptr); + HRESULT result = D3DCompileFromFile(filename.c_str(), nullptr, nullptr, "main", "vs_5_0", 0, 0, &m_VertexShaderBlob, &blob); if (result != S_OK) { std::wstring blobString((wchar_t*)blob->GetBufferPointer(), blob->GetBufferSize()); LOG_ERROR("Failed to compile vertex shader!\n\n%s", blobString.c_str()); diff --git a/src/game/Rendering/RawModel.cpp b/src/game/Rendering/RawModel.cpp index f639f55..46fb5df 100644 --- a/src/game/Rendering/RawModel.cpp +++ b/src/game/Rendering/RawModel.cpp @@ -30,6 +30,15 @@ dd::RawModel::RawModel(std::string fileName) return; } + auto m = scene->mRootNode->mTransformation; + m_Matrix = glm::mat4( + m.a1, m.a2, m.a3, m.a4, + m.b1, m.b2, m.b3, m.b4, + m.c1, m.c2, m.c3, m.c4, + m.d1, m.d2, m.d3, m.d4 + ); + m_Matrix = glm::transpose(m_Matrix); + auto meshes = scene->mMeshes; // Pre-count vertices