diff --git a/enginecustom/Light.vs b/enginecustom/Light.vs index 81923e6..8e32839 100644 --- a/enginecustom/Light.vs +++ b/enginecustom/Light.vs @@ -1,7 +1,3 @@ -//////////////////////////////////////////////////////////////////////////////// -// Filename: light.vs -//////////////////////////////////////////////////////////////////////////////// - ///////////// // DEFINES // ///////////// diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index bc6974c..af4d091 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -3,12 +3,9 @@ ApplicationClass::ApplicationClass() { m_Direct3D = 0; - m_Camera = 0; - m_MultiTextureShader = 0; - m_AlphaMapShader = 0; + m_Camera = 0; m_Model = 0; m_LightShader = 0; - m_LightMapShader = 0; m_Light = 0; m_TextureShader = 0; m_Bitmap = 0; @@ -22,8 +19,7 @@ ApplicationClass::ApplicationClass() m_TextString3 = 0; m_Fps = 0; m_FpsString = 0; - m_NormalMapShader = 0; - m_SpecMapShader = 0; + m_ShaderManager = 0; m_RenderCountString = 0; m_ModelList = 0; m_Position = 0; @@ -47,7 +43,7 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) { char mouseString1[32], mouseString2[32], mouseString3[32]; char testString1[32], testString2[32], testString3[32]; - char modelFilename[128], textureFilename1[128], textureFilename2[128], textureFilename3[128], renderString[32]; + char modelFilename[128], textureFilename1[128], textureFilename2[128], textureFilename3[128], textureFilename4[128], textureFilename5[128], textureFilename6[128], renderString[32]; char bitmapFilename[128]; char spriteFilename[128]; char fpsString[32]; @@ -83,26 +79,6 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) m_Camera->Render(); m_Camera->GetViewMatrix(m_baseViewMatrix); - // Create and initialize the specular map shader object. - m_SpecMapShader = new SpecMapShaderClass; - - result = m_SpecMapShader->Initialize(m_Direct3D->GetDevice(), hwnd); - if (!result) - { - MessageBox(hwnd, L"Could not initialize the specular map shader object.", L"Error", MB_OK); - return false; - } - - // Create and initialize the normal map shader object. - m_NormalMapShader = new NormalMapShaderClass; - - result = m_NormalMapShader->Initialize(m_Direct3D->GetDevice(), hwnd); - if (!result) - { - MessageBox(hwnd, L"Could not initialize the normal map shader object.", L"Error", MB_OK); - return false; - } - // Create and initialize the font shader object. m_FontShader = new FontShaderClass; @@ -233,15 +209,6 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) return false; } - // Create and initialize the multitexture shader object. - m_MultiTextureShader = new MultiTextureShaderClass; - - result = m_MultiTextureShader->Initialize(m_Direct3D->GetDevice(), hwnd); - if (!result) - { - MessageBox(hwnd, L"Could not initialize the multitexture shader object.", L"Error", MB_OK); - return false; - } // Set the file name of the model. strcpy_s(modelFilename, "cube.txt"); @@ -249,20 +216,23 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) // Set the file name of the textures. strcpy_s(textureFilename1, "stone01.tga"); strcpy_s(textureFilename2, "normal01.tga"); - strcpy_s(textureFilename3, "alpha01.tga"); + strcpy_s(textureFilename3, "spec02.tga"); + strcpy_s(textureFilename4, "alpha01.tga"); + strcpy_s(textureFilename5, "light01.tga"); + strcpy_s(textureFilename6, "moss01.tga"); // A FAIRE: Ajouter une nouvelle texture pour le multitexturing // Create and initialize the model object. m_Model = new ModelClass; - result = m_Model->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), modelFilename, textureFilename1, textureFilename2, textureFilename3); + result = m_Model->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), modelFilename, textureFilename1, textureFilename2, textureFilename3, textureFilename4, + textureFilename5, textureFilename6); if (!result) { MessageBox(hwnd, L"Could not initialize the model object.", L"Error", MB_OK); return false; } - // Create and initialize the light shader object. m_LightShader = new LightShaderClass; @@ -287,38 +257,38 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) // Create and initialize the light objects array. m_Lights = new LightClass[m_numLights]; + m_Lights[0].SetDiffuseColor(1.0f, 1.0f, 1.0f, 1.0f); // White + m_Lights[0].SetPosition(10.0f, -5.0f, -15.0f); + m_Lights[0].SetSpecularColor(1.0f, 1.0f, 1.0f, 1.0f); + m_Lights[0].SetSpecularPower(16.0f); + // Manually set the color and position of each light. - m_Lights[0].SetDiffuseColor(1.0f, 0.0f, 0.0f, 1.0f); // Red - m_Lights[0].SetPosition(-3.0f, 1.0f, 3.0f); + m_Lights[1].SetDiffuseColor(1.0f, 0.0f, 0.0f, 1.0f); // Red + m_Lights[1].SetPosition(-3.0f, 1.0f, 3.0f); + m_Lights[1].SetSpecularColor(1.0f, 1.0f, 1.0f, 1.0f); + m_Lights[1].SetSpecularPower(16.0f); - m_Lights[1].SetDiffuseColor(0.0f, 1.0f, 0.0f, 1.0f); // Green - m_Lights[1].SetPosition(3.0f, 1.0f, 3.0f); + m_Lights[2].SetDiffuseColor(0.0f, 1.0f, 0.0f, 1.0f); // Green + m_Lights[2].SetPosition(3.0f, 1.0f, 3.0f); + m_Lights[2].SetSpecularColor(1.0f, 1.0f, 1.0f, 1.0f); + m_Lights[2].SetSpecularPower(16.0f); + + m_Lights[3].SetDiffuseColor(0.0f, 0.0f, 1.0f, 1.0f); // Blue + m_Lights[3].SetPosition(-3.0f, 1.0f, -3.0f); + m_Lights[3].SetSpecularColor(1.0f, 1.0f, 1.0f, 1.0f); + m_Lights[3].SetSpecularPower(16.0f); - m_Lights[2].SetDiffuseColor(0.0f, 0.0f, 1.0f, 1.0f); // Blue - m_Lights[2].SetPosition(-3.0f, 1.0f, -3.0f); + + // Create and initialize the normal map shader object. + m_ShaderManager = new ShaderManagerClass; - m_Lights[3].SetDiffuseColor(1.0f, 1.0f, 1.0f, 1.0f); // White - m_Lights[3].SetPosition(3.0f, 1.0f, -3.0f); - - // Create and initialize the light map shader object. - m_LightMapShader = new LightMapShaderClass; - - result = m_LightMapShader->Initialize(m_Direct3D->GetDevice(), hwnd); + result = m_ShaderManager->Initialize(m_Direct3D->GetDevice(), hwnd); if (!result) { - MessageBox(hwnd, L"Could not initialize the light map shader object.", L"Error", MB_OK); return false; } - // Create and initialize the alpha map shader object. - m_AlphaMapShader = new AlphaMapShaderClass; - - result = m_AlphaMapShader->Initialize(m_Direct3D->GetDevice(), hwnd); - if (!result) - { - MessageBox(hwnd, L"Could not initialize the alpha map shader object.", L"Error", MB_OK); - return false; - } + // Create and initialize the font shader object. m_FontShader = new FontShaderClass; @@ -394,6 +364,15 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) void ApplicationClass::Shutdown() { + + // Release the shader manager object. + if (m_ShaderManager) + { + m_ShaderManager->Shutdown(); + delete m_ShaderManager; + m_ShaderManager = 0; + } + // Release the frustum class object. if (m_Frustum) { @@ -511,12 +490,19 @@ void ApplicationClass::Shutdown() m_Sprite = 0; } - // Release the light objects. - if(m_Lights) - { - delete [] m_Lights; - m_Lights = 0; - } + // Release the lights objects. + if (m_Lights) + { + delete[] m_Lights; + m_Lights = 0; + } + + // Release the light object. + if (m_Light) + { + delete m_Light; + m_Light = 0; + } // Release the light shader object. if (m_LightShader) @@ -526,91 +512,12 @@ void ApplicationClass::Shutdown() m_LightShader = 0; } - // Release the specular map shader object. - if (m_SpecMapShader) + // Release the model object. + if (m_Model) { - m_SpecMapShader->Shutdown(); - delete m_SpecMapShader; - m_SpecMapShader = 0; - } - - // Release the normal map shader object. - if (m_NormalMapShader) - { - m_NormalMapShader->Shutdown(); - delete m_NormalMapShader; - m_NormalMapShader = 0; - } - - // Liberez la memoire pour chaque cube - for (auto cube : m_cubes) - { - cube->Shutdown(); - delete cube; - } - m_cubes.clear(); - - // Liberez la memoire pour chaque cube du terrain - for (auto cube : m_terrainChunk) - { - cube->Shutdown(); - delete cube; - } - m_terrainChunk.clear(); - - for (auto object : m_object) - { - object->Shutdown(); - delete object; - } - m_object.clear(); - - // Release the multitexture shader object. - if (m_MultiTextureShader) - { - m_MultiTextureShader->Shutdown(); - delete m_MultiTextureShader; - m_MultiTextureShader = 0; - // Release the bitmap object. - if (m_Bitmap) - { - m_Bitmap->Shutdown(); - delete m_Bitmap; - m_Bitmap = 0; - } - - // Release the texture shader object. - if (m_TextureShader) - { - m_TextureShader->Shutdown(); - delete m_TextureShader; - m_TextureShader = 0; - } - - // Release the camera object. - if (m_Camera) - { - delete m_Camera; - m_Camera = 0; - } - - // Release the D3D object. - if (m_Direct3D) - { - m_Direct3D->Shutdown(); - delete m_Direct3D; - m_Direct3D = 0; - } - - return; - } - - // Release the alpha map shader object. - if (m_AlphaMapShader) - { - m_AlphaMapShader->Shutdown(); - delete m_AlphaMapShader; - m_AlphaMapShader = 0; + m_Model->Shutdown(); + delete m_Model; + m_Model = 0; } } @@ -620,15 +527,16 @@ bool ApplicationClass::Frame(InputClass* Input) int mouseX, mouseY, currentMouseX, currentMouseY; bool result, leftMouseDown, rightMouseDown, keyDown, buttonQ, buttonD, buttonZ, buttonS, buttonA, buttonE; float rotationY, rotationX, positionX, positionY, positionZ; + static float textureTranslation = 0.0f; float frameTime; static int lastMouseX = 0, lastMouseY = 0; static float rotation = 360.0f; - static float x = 6.f; - static float y = 3.f; - static float z = 0.f; + static float x = 0.f; + static float y = 0.f; + static float z = -8.f; // Update the system stats. m_Timer->Frame(); @@ -690,7 +598,7 @@ bool ApplicationClass::Frame(InputClass* Input) m_Camera->Render(); // Render the graphics scene. - result = Render(rotation, x, y, z); + result = Render(rotation, x, y, z, textureTranslation); if (!result) { return false; @@ -710,13 +618,13 @@ bool ApplicationClass::Frame(InputClass* Input) rotation += 360.0f; } - // Update the x position variable each frame. - x -= 0.0174532925f * 0.6f; + //// Update the x position variable each frame. + //x -= 0.0174532925f * 0.6f; - y -= 0.0174532925f * 0.2f; + //y -= 0.0174532925f * 0.2f; - // Update the z position variable each frame. - z -= 0.0174532925f * 0.2f; + //// Update the z position variable each frame. + //z -= 0.0174532925f * 0.2f; // Render the scene to a render texture. result = RenderSceneToTexture(rotation); @@ -725,6 +633,10 @@ bool ApplicationClass::Frame(InputClass* Input) return false; } + + // Check if the mouse has been pressed. + mouseDown = Input->IsMousePressed(); + // Update the mouse strings each frame. result = UpdateMouseStrings(mouseX, mouseY, leftMouseDown); if (!result) @@ -735,6 +647,20 @@ bool ApplicationClass::Frame(InputClass* Input) // Update the sprite object using the frame time. m_Sprite->Update(frameTime); + // Increment the texture translation. + textureTranslation += 0.01f; + if (textureTranslation > 1.0f) + { + textureTranslation -= 1.0f; + } + + // Render the graphics scene. + result = Render(rotation, x, y, z, textureTranslation); + if (!result) + { + return false; + } + return true; } @@ -774,7 +700,7 @@ bool ApplicationClass::RenderSceneToTexture(float rotation) return true; } -bool ApplicationClass::Render(float rotation, float x, float y, float z) +bool ApplicationClass::Render(float rotation, float x, float y, float z, float textureTranslation) { XMMATRIX worldMatrix, viewMatrix, orthoMatrix, projectionMatrix, rotateMatrix, translateMatrix, scaleMatrix, srMatrix; float positionX, positionY, positionZ, radius; @@ -1076,6 +1002,16 @@ bool ApplicationClass::Render(float rotation, float x, float y, float z) return false; } + //// Get the light properties. + //for (i = 0; i < m_numLights; i++) + //{ + // // Create the diffuse color array from the four light colors. + // diffuseColor[i] = m_Lights[i].GetDiffuseColor(); + + // // Create the light position array from the four light positions. + // lightPosition[i] = m_Lights[i].GetPosition(); + //} + //scaleMatrix = XMMatrixScaling(0.75f, 0.75f, 0.75f); // Build the scaling matrix. //rotateMatrix = XMMatrixRotationY(rotation); // Build the rotation matrix. //translateMatrix = XMMatrixTranslation(x, y, z); // Build the translation matrix. @@ -1114,6 +1050,100 @@ bool ApplicationClass::Render(float rotation, float x, float y, float z) //// Render the model using the multitexture shader. //m_Model->Render(m_Direct3D->GetDeviceContext()); + // Setup matrices. + rotateMatrix = XMMatrixRotationY(rotation); + translateMatrix = XMMatrixTranslation(-5.0f, 1.0f, -20.0f); + worldMatrix = XMMatrixMultiply(rotateMatrix, translateMatrix); + + // Render the model using the alpha map shader. + m_Model->Render(m_Direct3D->GetDeviceContext()); + + result = m_ShaderManager->RenderAlphaMapShader(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, + m_Model->GetTexture(0), m_Model->GetTexture(5), m_Model->GetTexture(3)); + if (!result) + { + return false; + } + + // Setup matrices. + rotateMatrix = XMMatrixRotationY(rotation); + translateMatrix = XMMatrixTranslation(-5.0f, -5.0f, -20.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(0.0f, 1.0f, -20.0f); + worldMatrix = XMMatrixMultiply(rotateMatrix, translateMatrix); + + // Render the model using the render 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_Lights->GetDirection(), m_Lights->GetDiffuseColor()); + if (!result) + { + return false; + } + + + // Setup matrices. + rotateMatrix = XMMatrixRotationY(rotation); + translateMatrix = XMMatrixTranslation(0.0f, -2.0f, -20.0f); + worldMatrix = XMMatrixMultiply(rotateMatrix, translateMatrix); + + // Render the model using the multitexture shader. + m_Model->Render(m_Direct3D->GetDeviceContext()); + + result = m_ShaderManager->RenderMultitextureShader(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, + m_Model->GetTexture(0), m_Model->GetTexture(5)); + if (!result) + { + return false; + } + + + // Setup matrices. + rotateMatrix = XMMatrixRotationY(rotation); + translateMatrix = XMMatrixTranslation(0.0f, -5.0f, -20.0f); + worldMatrix = XMMatrixMultiply(rotateMatrix, translateMatrix); + + // Render the model using the translate shader. + m_Model->Render(m_Direct3D->GetDeviceContext()); + + result = m_ShaderManager->RenderTranslateShader(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, + m_Model->GetTexture(0), textureTranslation); + if (!result) + { + return false; + } + + // Setup matrices. + rotateMatrix = XMMatrixRotationY(rotation); + translateMatrix = XMMatrixTranslation(-5.0f, -2.0f, -20.0f); + worldMatrix = XMMatrixMultiply(rotateMatrix, translateMatrix); + + // Render the model using the specular map shader. + m_Model->Render(m_Direct3D->GetDeviceContext()); + + result = m_ShaderManager->RenderSpecMapShader(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, + m_Model->GetTexture(0), m_Model->GetTexture(1), m_Model->GetTexture(2), m_Lights->GetDirection(), m_Lights->GetDiffuseColor(), + m_Camera->GetPosition(), m_Lights->GetSpecularColor(), m_Lights->GetSpecularPower()); + 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); @@ -1130,21 +1160,6 @@ bool ApplicationClass::Render(float rotation, float x, float y, float z) // return false; //} - // MultiTexturing - //result = m_MultiTextureShader->Render(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, - // m_Model->GetTexture(0), m_Model->GetTexture(1)); - //if (!result) - //{ - // return false; - //} - - // Alphamapping - /*result = m_AlphaMapShader->Render(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, - m_Model->GetTexture(0), m_Model->GetTexture(1), m_Model->GetTexture(2)); - if (!result) - { - return false; - }*/ // Enable the Z buffer and disable alpha blending now that 2D rendering is complete. m_Direct3D->TurnZBufferOn(); diff --git a/enginecustom/applicationclass.h b/enginecustom/applicationclass.h index 820f2d7..8068974 100644 --- a/enginecustom/applicationclass.h +++ b/enginecustom/applicationclass.h @@ -14,26 +14,22 @@ #include <filesystem> #include "lightmapshaderclass.h" -#include "multitextureshaderclass.h" -#include "alphamapshaderclass.h" #include "bitmapclass.h" -#include "textureshaderclass.h" #include "spriteclass.h" +#include "textureshaderclass.h" #include "timerclass.h" #include "fontshaderclass.h" #include "fontclass.h" #include "textclass.h" #include "fpsclass.h" #include "inputclass.h" -#include "normalmapshaderclass.h" -#include "specmapshaderclass.h" +#include "shadermanagerclass.h" #include "modellistclass.h" #include "positionclass.h" #include "frustumclass.h" #include "rendertextureclass.h" #include "displayplaneclass.h" -#include "translateshaderclass.h" -#include "reflectionshaderclass.h" + ///////////// @@ -79,7 +75,7 @@ public: void DeleteTerrain(); private: - bool Render(float, float, float, float); + bool Render(float, float, float, float, float); bool UpdateMouseStrings(int, int, bool); bool UpdateFps(); bool UpdateRenderCountString(int); @@ -94,6 +90,8 @@ private : D3DClass* m_Direct3D; IDXGISwapChain* m_swapChain; ModelClass* m_Model; + TextureShaderClass* m_TextureShader; + ShaderManagerClass* m_ShaderManager; ModelListClass* m_ModelList; // ------------------------------------- // @@ -132,13 +130,7 @@ private : LightShaderClass* m_LightShader; LightMapShaderClass* m_LightMapShader; - MultiTextureShaderClass* m_MultiTextureShader; - AlphaMapShaderClass* m_AlphaMapShader; - TextureShaderClass* m_TextureShader; FontShaderClass* m_FontShader; - NormalMapShaderClass* m_NormalMapShader; - SpecMapShaderClass* m_SpecMapShader; - TranslateShaderClass* m_TranslateShader; ReflectionShaderClass* m_ReflectionShader; BitmapClass* m_Bitmap; @@ -157,6 +149,7 @@ private : TextClass* m_FpsString; int m_previousFps; +r-Manager }; #endif \ No newline at end of file diff --git a/enginecustom/enginecustom.vcxproj b/enginecustom/enginecustom.vcxproj index 81c17e5..68ebf0c 100644 --- a/enginecustom/enginecustom.vcxproj +++ b/enginecustom/enginecustom.vcxproj @@ -48,6 +48,7 @@ <ClCompile Include="modellistclass.cpp" /> <ClCompile Include="Multitextureshaderclass.cpp" /> <ClCompile Include="normalmapshaderclass.cpp" /> + <ClCompile Include="shadermanagerclass.cpp" /> <ClCompile Include="positionclass.cpp" /> <ClCompile Include="reflectionshaderclass.cpp" /> <ClCompile Include="rendertextureclass.cpp" /> @@ -90,6 +91,7 @@ <ClInclude Include="modellistclass.h" /> <ClInclude Include="Multitextureshaderclass.h" /> <ClInclude Include="normalmapshaderclass.h" /> + <ClInclude Include="shadermanagerclass.h" /> <ClInclude Include="positionclass.h" /> <ClInclude Include="reflectionshaderclass.h" /> <ClInclude Include="rendertextureclass.h" /> @@ -129,7 +131,6 @@ <ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Pixel</ShaderType> <ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Pixel</ShaderType> <ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Pixel</ShaderType> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild> <FileType>Document</FileType> </None> <None Include="Color.vs"> @@ -137,7 +138,6 @@ <ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Vertex</ShaderType> <ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Vertex</ShaderType> <ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Vertex</ShaderType> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild> <FileType>Document</FileType> </None> </ItemGroup> @@ -150,6 +150,7 @@ <Image Include="moss01.tga" /> <Image Include="normal01.tga" /> <Image Include="papier.tga" /> + <Image Include="spec02.tga" /> <Image Include="stone01.tga" /> <Image Include="wall.tga" /> </ItemGroup> @@ -175,7 +176,6 @@ <VCProjectVersion>17.0</VCProjectVersion> <Keyword>Win32Proj</Keyword> <ProjectGuid>{92cf56c4-76bb-40d4-8fe5-36c15f5f127a}</ProjectGuid> - <RootNamespace>enginecustom</RootNamespace> <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> diff --git a/enginecustom/enginecustom.vcxproj.filters b/enginecustom/enginecustom.vcxproj.filters index 07bef64..44441ea 100644 --- a/enginecustom/enginecustom.vcxproj.filters +++ b/enginecustom/enginecustom.vcxproj.filters @@ -398,5 +398,8 @@ <Text Include="square.txt"> <Filter>assets</Filter> </Text> + <ClCompile Include="shadermanagerclass.cpp" /> + <ClInclude Include="shadermanagerclass.h" /> + <Image Include="spec02.tga" /> </ItemGroup> </Project> \ No newline at end of file diff --git a/enginecustom/light.vs b/enginecustom/light.vs index 81923e6..8e32839 100644 --- a/enginecustom/light.vs +++ b/enginecustom/light.vs @@ -1,7 +1,3 @@ -//////////////////////////////////////////////////////////////////////////////// -// Filename: light.vs -//////////////////////////////////////////////////////////////////////////////// - ///////////// // DEFINES // ///////////// diff --git a/enginecustom/modelclass.cpp b/enginecustom/modelclass.cpp index 38dcfa7..c47f3b1 100644 --- a/enginecustom/modelclass.cpp +++ b/enginecustom/modelclass.cpp @@ -19,7 +19,8 @@ ModelClass::~ModelClass() { } -bool ModelClass::Initialize(ID3D11Device* device, ID3D11DeviceContext* deviceContext, char* modelFilename, char* textureFilename1, char* textureFilename2, char* textureFilename3) +bool ModelClass::Initialize(ID3D11Device* device, ID3D11DeviceContext* deviceContext, char* modelFilename, char* textureFilename1, char* textureFilename2, char* textureFilename3, + char* textureFilename4, char* textureFilename5, char* textureFilename6) { bool result; @@ -40,7 +41,7 @@ bool ModelClass::Initialize(ID3D11Device* device, ID3D11DeviceContext* deviceCon return false; } // Load the textures for this model. - result = LoadTextures(device, deviceContext, textureFilename1, textureFilename2, textureFilename3); + result = LoadTextures(device, deviceContext, textureFilename1, textureFilename2, textureFilename3, textureFilename4, textureFilename5, textureFilename6); if (!result) { return false; @@ -206,13 +207,14 @@ void ModelClass::RenderBuffers(ID3D11DeviceContext* deviceContext) } -bool ModelClass::LoadTextures(ID3D11Device* device, ID3D11DeviceContext* deviceContext, char* filename1, char* filename2, char* filename3) +bool ModelClass::LoadTextures(ID3D11Device* device, ID3D11DeviceContext* deviceContext, char* filename1, char* filename2, char* filename3, char* filename4, char* filename5, + char* filename6) { bool result; // Create and initialize the texture object array. - m_Textures = new TextureClass[3]; + m_Textures = new TextureClass[6]; result = m_Textures[0].Initialize(device, deviceContext, filename1); if (!result) @@ -232,6 +234,24 @@ bool ModelClass::LoadTextures(ID3D11Device* device, ID3D11DeviceContext* deviceC return false; } + result = m_Textures[3].Initialize(device, deviceContext, filename4); + if (!result) + { + return false; + } + + result = m_Textures[4].Initialize(device, deviceContext, filename5); + if (!result) + { + return false; + } + + result = m_Textures[5].Initialize(device, deviceContext, filename6); + if (!result) + { + return false; + } + return true; } @@ -244,6 +264,9 @@ void ModelClass::ReleaseTextures() m_Textures[0].Shutdown(); m_Textures[1].Shutdown(); m_Textures[2].Shutdown(); + m_Textures[3].Shutdown(); + m_Textures[4].Shutdown(); + m_Textures[5].Shutdown(); delete[] m_Textures; m_Textures = 0; diff --git a/enginecustom/modelclass.h b/enginecustom/modelclass.h index 70eed55..3db14c8 100644 --- a/enginecustom/modelclass.h +++ b/enginecustom/modelclass.h @@ -80,7 +80,7 @@ public: ModelClass(const ModelClass&); ~ModelClass(); - bool Initialize(ID3D11Device*, ID3D11DeviceContext*, char*, char*, char*, char*); + bool Initialize(ID3D11Device*, ID3D11DeviceContext*, char*, char*, char*, char*, char*, char*, char*); void Shutdown(); void Render(ID3D11DeviceContext*); @@ -91,7 +91,7 @@ private: bool InitializeBuffers(ID3D11Device*); void ShutdownBuffers(); void RenderBuffers(ID3D11DeviceContext*); - bool LoadTextures(ID3D11Device*, ID3D11DeviceContext*, char*, char*, char*); + bool LoadTextures(ID3D11Device*, ID3D11DeviceContext*, char*, char*, char*, char*, char*, char*); void ReleaseTextures(); bool LoadModel(char*); diff --git a/enginecustom/packages.config b/enginecustom/packages.config deleted file mode 100644 index cbf6205..0000000 --- a/enginecustom/packages.config +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<packages> - <package id="Microsoft.Windows.CppWinRT" version="2.0.220531.1" targetFramework="native" /> -</packages> \ No newline at end of file diff --git a/enginecustom/papier.tga b/enginecustom/papier.tga deleted file mode 100644 index 4f0b9b9..0000000 Binary files a/enginecustom/papier.tga and /dev/null differ diff --git a/enginecustom/shadermanagerclass.cpp b/enginecustom/shadermanagerclass.cpp new file mode 100644 index 0000000..4a7a99c --- /dev/null +++ b/enginecustom/shadermanagerclass.cpp @@ -0,0 +1,229 @@ +#include "shadermanagerclass.h" + +ShaderManagerClass::ShaderManagerClass() +{ + m_TextureShader = 0; + m_NormalMapShader = 0; + m_MultitextureShader = 0; + m_TranslateShader = 0; + m_AlphaMapShader = 0; + m_SpecMapShader = 0; +} + + +ShaderManagerClass::ShaderManagerClass(const ShaderManagerClass& other) +{ +} + + +ShaderManagerClass::~ShaderManagerClass() +{ +} + + +bool ShaderManagerClass::Initialize(ID3D11Device* device, HWND hwnd) +{ + bool result; + + // Create and initialize the texture shader object. + m_TextureShader = new TextureShaderClass; + + result = m_TextureShader->Initialize(device, hwnd); + if (!result) + { + return false; + } + + // Create and initialize the normal map shader object. + m_NormalMapShader = new NormalMapShaderClass; + + result = m_NormalMapShader->Initialize(device, hwnd); + if (!result) + { + return false; + } + + // Create and initialize the multitexture shader object. + m_MultitextureShader = new MultiTextureShaderClass; + + result = m_MultitextureShader->Initialize(device, hwnd); + if (!result) + { + return false; + } + + // Create and initialize the translate shader object. + m_TranslateShader = new TranslateShaderClass; + + result = m_TranslateShader->Initialize(device, hwnd); + if (!result) + { + return false; + } + + // Create and initialize the alpha map shader object. + m_AlphaMapShader = new AlphaMapShaderClass; + + result = m_AlphaMapShader->Initialize(device, hwnd); + if (!result) + { + return false; + } + + // Create and initialize the specular map shader object. + m_SpecMapShader = new SpecMapShaderClass; + + result = m_SpecMapShader->Initialize(device, hwnd); + if (!result) + { + return false; + } + + return true; +} + +void ShaderManagerClass::Shutdown() +{ + // Release the normal map shader object. + if (m_NormalMapShader) + { + m_NormalMapShader->Shutdown(); + delete m_NormalMapShader; + m_NormalMapShader = 0; + } + + // Release the texture shader object. + if (m_TextureShader) + { + m_TextureShader->Shutdown(); + delete m_TextureShader; + m_TextureShader = 0; + } + + // Release the multitexture shader object. + if (m_MultitextureShader) + { + m_MultitextureShader->Shutdown(); + delete m_MultitextureShader; + m_MultitextureShader = 0; + } + + // Release the multitexture shader object. + if (m_TranslateShader) + { + m_TranslateShader->Shutdown(); + delete m_TranslateShader; + m_TranslateShader = 0; + } + + // Release the alpha map shader object. + if (m_AlphaMapShader) + { + m_AlphaMapShader->Shutdown(); + delete m_AlphaMapShader; + m_AlphaMapShader = 0; + } + + // Release the specular map shader object. + if (m_SpecMapShader) + { + m_SpecMapShader->Shutdown(); + delete m_SpecMapShader; + m_SpecMapShader = 0; + } + + return; + +} + +bool ShaderManagerClass::RenderTextureShader(ID3D11DeviceContext* deviceContext, int indexCount, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix, + ID3D11ShaderResourceView* texture) +{ + bool result; + + + result = m_TextureShader->Render(deviceContext, indexCount, worldMatrix, viewMatrix, projectionMatrix, texture); + if (!result) + { + return false; + } + + return true; +} + +bool ShaderManagerClass::RenderNormalMapShader(ID3D11DeviceContext* deviceContext, int indexCount, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix, + ID3D11ShaderResourceView* colorTexture, ID3D11ShaderResourceView* normalTexture, XMFLOAT3 lightDirection, XMFLOAT4 diffuseColor) +{ + bool result; + + + result = m_NormalMapShader->Render(deviceContext, indexCount, worldMatrix, viewMatrix, projectionMatrix, colorTexture, normalTexture, lightDirection, diffuseColor); + if (!result) + { + return false; + } + + return true; +} + +bool ShaderManagerClass::RenderMultitextureShader(ID3D11DeviceContext* deviceContext, int indexCount, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix, + ID3D11ShaderResourceView* texture1, ID3D11ShaderResourceView* texture2) +{ + bool result; + + + result = m_MultitextureShader->Render(deviceContext, indexCount, worldMatrix, viewMatrix, projectionMatrix, texture1, texture2); + if (!result) + { + return false; + } + + return true; +} + +bool ShaderManagerClass::RenderTranslateShader(ID3D11DeviceContext* deviceContext, int indexCount, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix, + ID3D11ShaderResourceView* texture1, float valeur) +{ + bool result; + + + result = m_TranslateShader->Render(deviceContext, indexCount, worldMatrix, viewMatrix, projectionMatrix, texture1, valeur); + if (!result) + { + return false; + } + + return true; +} + +bool ShaderManagerClass::RenderAlphaMapShader(ID3D11DeviceContext* deviceContext, int indexCount, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix, + ID3D11ShaderResourceView* texture1, ID3D11ShaderResourceView* texture2, ID3D11ShaderResourceView* texture3) +{ + bool result; + + + result = m_AlphaMapShader->Render(deviceContext, indexCount, worldMatrix, viewMatrix, projectionMatrix, texture1, texture2, texture3); + if (!result) + { + return false; + } + + return true; +} + +bool ShaderManagerClass::RenderSpecMapShader(ID3D11DeviceContext* deviceContext, int indexCount, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix, + ID3D11ShaderResourceView* texture1, ID3D11ShaderResourceView* texture2, ID3D11ShaderResourceView* texture3, + XMFLOAT3 lightDirection, XMFLOAT4 diffuseColor, XMFLOAT3 cameraPosition, XMFLOAT4 specularColor, float specularPower) +{ + bool result; + + + result = m_SpecMapShader->Render(deviceContext, indexCount, worldMatrix, viewMatrix, projectionMatrix, texture1, texture2, texture3, lightDirection, + diffuseColor, cameraPosition, specularColor, specularPower); + if (!result) + { + return false; + } + + return true; +} \ No newline at end of file diff --git a/enginecustom/shadermanagerclass.h b/enginecustom/shadermanagerclass.h new file mode 100644 index 0000000..23a3a50 --- /dev/null +++ b/enginecustom/shadermanagerclass.h @@ -0,0 +1,45 @@ +#ifndef _SHADERMANAGERCLASS_H_ +#define _SHADERMANAGERCLASS_H_ + +/////////////////////// +// MY CLASS INCLUDES // +/////////////////////// +#include "textureshaderclass.h" +#include "lightshaderclass.h" +#include "normalmapshaderclass.h" +#include "Multitextureshaderclass.h" +#include "translateshaderclass.h" +#include "alphamapshaderclass.h" +#include "specmapshaderclass.h" + + +//////////////////////////////////////////////////////////////////////////////// +// Class name: ShaderManagerClass +//////////////////////////////////////////////////////////////////////////////// +class ShaderManagerClass +{ +public: + ShaderManagerClass(); + ShaderManagerClass(const ShaderManagerClass&); + ~ShaderManagerClass(); + + bool Initialize(ID3D11Device*, HWND); + void Shutdown(); + bool RenderTextureShader(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*); + bool RenderNormalMapShader(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, ID3D11ShaderResourceView*, XMFLOAT3, XMFLOAT4); + bool RenderMultitextureShader(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, ID3D11ShaderResourceView*); + bool RenderTranslateShader(ID3D11DeviceContext*,int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, float); + bool RenderAlphaMapShader(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, ID3D11ShaderResourceView*, ID3D11ShaderResourceView*); + bool RenderSpecMapShader(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, ID3D11ShaderResourceView*, ID3D11ShaderResourceView*, + XMFLOAT3, XMFLOAT4, XMFLOAT3, XMFLOAT4, float); + +private: + TextureShaderClass* m_TextureShader; + NormalMapShaderClass* m_NormalMapShader; + MultiTextureShaderClass* m_MultitextureShader; + TranslateShaderClass* m_TranslateShader; + AlphaMapShaderClass* m_AlphaMapShader; + SpecMapShaderClass* m_SpecMapShader; +}; + +#endif diff --git a/enginecustom/spec02.tga b/enginecustom/spec02.tga new file mode 100644 index 0000000..b5085a7 Binary files /dev/null and b/enginecustom/spec02.tga differ diff --git a/enginecustom/translateshaderclass.cpp b/enginecustom/translateshaderclass.cpp index 47692f3..6eca67c 100644 --- a/enginecustom/translateshaderclass.cpp +++ b/enginecustom/translateshaderclass.cpp @@ -8,7 +8,6 @@ TranslateShaderClass::TranslateShaderClass() m_layout = 0; m_matrixBuffer = 0; m_sampleState = 0; - m_translateBuffer = 0; } @@ -31,14 +30,14 @@ bool TranslateShaderClass::Initialize(ID3D11Device* device, HWND hwnd) int error; // Set the filename of the vertex shader. - error = wcscpy_s(vsFilename, 128, L"../Engine/translate.vs"); + error = wcscpy_s(vsFilename, 128, L"translate.vs"); if (error != 0) { return false; } // Set the filename of the pixel shader. - error = wcscpy_s(psFilename, 128, L"../Engine/translate.ps"); + error = wcscpy_s(psFilename, 128, L"translate.ps"); if (error != 0) { return false; diff --git a/enginecustom/translateshaderclass.h b/enginecustom/translateshaderclass.h index a51f1ab..779c535 100644 --- a/enginecustom/translateshaderclass.h +++ b/enginecustom/translateshaderclass.h @@ -55,7 +55,6 @@ private: ID3D11InputLayout* m_layout; ID3D11Buffer* m_matrixBuffer; ID3D11SamplerState* m_sampleState; - ID3D11Buffer* m_translateBuffer; };