diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index 47da0b4..6b46f2c 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -503,64 +503,6 @@ bool ApplicationClass::Frame(InputClass* Input) return false; } - XMMATRIX worldMatrix, viewMatrix, projectionMatrix, rotateMatrix, translateMatrix; - - // Clear the buffers to begin the scene. - m_Direct3D->BeginScene(0.0f, 0.0f, 0.0f, 1.0f); - - // Get the world, view, and projection matrices from the camera and d3d objects. - m_Direct3D->GetWorldMatrix(worldMatrix); - m_Camera->GetViewMatrix(viewMatrix); - m_Direct3D->GetProjectionMatrix(projectionMatrix); - - // Setup matrices. - rotateMatrix = XMMatrixRotationY(rotation); - translateMatrix = XMMatrixTranslation(0.0f, 1.0f, 0.0f); - worldMatrix = XMMatrixMultiply(rotateMatrix, translateMatrix); - - // Render the model using the texture shader. - m_Model->Render(m_Direct3D->GetDeviceContext()); - - result = m_ShaderManager->RenderTextureShader(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, - m_Model->GetTexture(0)); - if (!result) - { - return false; - } - - // Setup matrices. - rotateMatrix = XMMatrixRotationY(rotation); - translateMatrix = XMMatrixTranslation(-1.5f, -1.0f, 0.0f); - worldMatrix = XMMatrixMultiply(rotateMatrix, translateMatrix); - - // Render the model using the light shader. - m_Model->Render(m_Direct3D->GetDeviceContext()); - - result = m_ShaderManager->RenderLightShader(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, - m_Model->GetTexture(0), m_Light->GetDirection(), m_Light->GetDiffuseColor()); - if (!result) - { - return false; - } - - // Setup matrices. - rotateMatrix = XMMatrixRotationY(rotation); - translateMatrix = XMMatrixTranslation(1.5f, -1.0f, 0.0f); - worldMatrix = XMMatrixMultiply(rotateMatrix, translateMatrix); - - // Render the model using the normal map shader. - m_Model->Render(m_Direct3D->GetDeviceContext()); - - result = m_ShaderManager->RenderNormalMapShader(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, - m_Model->GetTexture(0), m_Model->GetTexture(1), m_Light->GetDirection(), m_Light->GetDiffuseColor()); - if (!result) - { - return false; - } - - // Present the rendered scene to the screen. - m_Direct3D->EndScene(); - // Get the location of the mouse from the input object, Input->GetMouseLocation(mouseX, mouseY); @@ -714,6 +656,43 @@ bool ApplicationClass::Render(float rotation, float x, float y, float z) // Render the model using the multitexture shader. m_Model->Render(m_Direct3D->GetDeviceContext()); + result = m_ShaderManager->RenderTextureShader(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, + m_Model->GetTexture(0)); + if (!result) + { + return false; + } + + // Setup matrices. + rotateMatrix = XMMatrixRotationY(rotation); + translateMatrix = XMMatrixTranslation(-1.5f, -1.0f, 0.0f); + worldMatrix = XMMatrixMultiply(rotateMatrix, translateMatrix); + + // Render the model using the light shader. + m_Model->Render(m_Direct3D->GetDeviceContext()); + + result = m_ShaderManager->RenderLightShader(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, + m_Model->GetTexture(0), m_Light->GetDirection(), m_Light->GetDiffuseColor()); + if (!result) + { + return false; + } + + // Setup matrices. + rotateMatrix = XMMatrixRotationY(rotation); + translateMatrix = XMMatrixTranslation(1.5f, -1.0f, 0.0f); + worldMatrix = XMMatrixMultiply(rotateMatrix, translateMatrix); + + // Render the model using the normal map shader. + m_Model->Render(m_Direct3D->GetDeviceContext()); + + result = m_ShaderManager->RenderNormalMapShader(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, + m_Model->GetTexture(0), m_Model->GetTexture(1), m_Light->GetDirection(), m_Light->GetDiffuseColor()); + if (!result) + { + return false; + } + // Lighting, utilise plusieurs lights donc Multiple Points Lighting //result = m_LightShader->Render(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, m_Model->GetTexture(0), // diffuseColor, lightPosition); diff --git a/enginecustom/shadermanagerclass.cpp b/enginecustom/shadermanagerclass.cpp index 4aed5f6..65c02cd 100644 --- a/enginecustom/shadermanagerclass.cpp +++ b/enginecustom/shadermanagerclass.cpp @@ -102,17 +102,28 @@ bool ShaderManagerClass::RenderLightShader(ID3D11DeviceContext* deviceContext, i { bool result; + // Allouer de la mémoire pour stocker XMFLOAT4 pour la direction de la lumière + XMFLOAT4* lightDirection4Ptr = new XMFLOAT4(lightDirection.x, lightDirection.y, lightDirection.z, 1.0f); - result = m_LightShader->Render(deviceContext, indexCount, worldMatrix, viewMatrix, projectionMatrix, texture, lightDirection, diffuseColor); + // Allouer de la mémoire pour stocker XMFLOAT4 pour la couleur diffuse + XMFLOAT4* diffuseColorPtr = new XMFLOAT4(diffuseColor); + + result = m_LightShader->Render(deviceContext, indexCount, worldMatrix, viewMatrix, projectionMatrix, texture, lightDirection4Ptr, diffuseColorPtr); if (!result) { + delete lightDirection4Ptr; + delete diffuseColorPtr; return false; } + delete lightDirection4Ptr; + delete diffuseColorPtr; return true; } + + bool ShaderManagerClass::RenderNormalMapShader(ID3D11DeviceContext* deviceContext, int indexCount, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix, ID3D11ShaderResourceView* colorTexture, ID3D11ShaderResourceView* normalTexture, XMFLOAT3 lightDirection, XMFLOAT4 diffuseColor) {