5 Commits

10 changed files with 277 additions and 244 deletions

View File

@@ -7,7 +7,10 @@
<list default="true" id="e81d6e08-efc7-40a0-909d-ec4943d948e9" name="Changes" comment=""> <list default="true" id="e81d6e08-efc7-40a0-909d-ec4943d948e9" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.idea/.idea.KhaoticEngineReborn/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.KhaoticEngineReborn/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/.idea.KhaoticEngineReborn/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.KhaoticEngineReborn/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/enginecustom/imgui.ini" beforeDir="false" afterPath="$PROJECT_DIR$/enginecustom/imgui.ini" afterDir="false" /> <change beforePath="$PROJECT_DIR$/enginecustom/imgui.ini" beforeDir="false" afterPath="$PROJECT_DIR$/enginecustom/imgui.ini" afterDir="false" />
<change beforePath="$PROJECT_DIR$/enginecustom/src/inc/system/imguiManager.h" beforeDir="false" afterPath="$PROJECT_DIR$/enginecustom/src/inc/system/imguiManager.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/enginecustom/src/inc/system/modelclass.h" beforeDir="false" afterPath="$PROJECT_DIR$/enginecustom/src/inc/system/modelclass.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/enginecustom/src/src/system/imguiManager.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/enginecustom/src/src/system/imguiManager.cpp" afterDir="false" /> <change beforePath="$PROJECT_DIR$/enginecustom/src/src/system/imguiManager.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/enginecustom/src/src/system/imguiManager.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/enginecustom/src/src/system/modelclass.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/enginecustom/src/src/system/modelclass.cpp" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -21,6 +24,132 @@
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component> </component>
<component name="HighlightingSettingsPerFile"> <component name="HighlightingSettingsPerFile">
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="file://C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/um/d3d11.h" root0="SKIP_HIGHLIGHTING" /> <setting file="file://C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/um/d3d11.h" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/enginecustom/include/Inc/VertexTypes.h" root0="SKIP_HIGHLIGHTING" /> <setting file="file://$PROJECT_DIR$/enginecustom/include/Inc/VertexTypes.h" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/enginecustom/include/Vulkan/Include/vulkan/vulkan_core.h" root0="SKIP_HIGHLIGHTING" /> <setting file="file://$PROJECT_DIR$/enginecustom/include/Vulkan/Include/vulkan/vulkan_core.h" root0="SKIP_HIGHLIGHTING" />
@@ -179,7 +308,12 @@
<workItem from="1746538260893" duration="5781000" /> <workItem from="1746538260893" duration="5781000" />
<workItem from="1746546014271" duration="1814000" /> <workItem from="1746546014271" duration="1814000" />
<workItem from="1746619988287" duration="12282000" /> <workItem from="1746619988287" duration="12282000" />
<workItem from="1746711806997" duration="6619000" /> <workItem from="1746711806997" duration="6736000" />
<workItem from="1746719840054" duration="991000" />
<workItem from="1746795732153" duration="33000" />
<workItem from="1746795828588" duration="592000" />
<workItem from="1747049871967" duration="9350000" />
<workItem from="1747136509645" duration="3939000" />
</task> </task>
<task id="LOCAL-00001" summary="Minor update - viewport window tweak"> <task id="LOCAL-00001" summary="Minor update - viewport window tweak">
<option name="closed" value="true" /> <option name="closed" value="true" />

View File

@@ -2,13 +2,13 @@
Khaotic Engine Reborn reprend comme base le moteur Khaotic Engine pour lui ajouter plus de fonctionalité. Khaotic Engine Reborn reprend comme base le moteur Khaotic Engine pour lui ajouter plus de fonctionalité.
Ce moteur est basé sur **DirectX11** utilise **ImGui** avec une couche d'abstraction pour permetre son usage avec d'autres API. Ce moteur est basé sur **DirectX11** et utilise **ImGui** pour son interface graphique.
--- ---
Khaotic Engine is a rendering engine made in **C++** by a small team with the aim of learning how to use rendering APIs (OpenGL, DirectX 11/12 and Vulkan). Khaotic Engine is a rendering engine made in **C++** by a small team with the aim of learning how to use rendering APIs (OpenGL, DirectX 11/12 and Vulkan).
This **DirectX11** based engine uses **ImGui** with an abstraction layer to enable its use with other APIs. This **DirectX11** based engine uses **ImGui** for the user interface.
## Installation ## Installation
@@ -77,7 +77,7 @@ This **DirectX11** based engine uses **ImGui** with an abstraction layer to enab
- [@Harpie94](https://github.com/Harpie94) - [@Harpie94](https://github.com/Harpie94)
- [@axelpicou](https://github.com/axelpicou) - [@axelpicou](https://github.com/axelpicou)
- [@GolfOcean334](https://github.com/GolfOcean334) - [@GolfOcean334](https://github.com/GolfOcean334)
- [@sutabasuto](https://github.com/sutabasuto) - [@sutabasuto](https://github.com/sutabasuto)
**Moteur Reborn** : **Moteur Reborn** :

View File

@@ -4,20 +4,20 @@ Size=400,400
Collapsed=0 Collapsed=0
[Window][Khaotic Engine] [Window][Khaotic Engine]
Pos=1745,19 Pos=1281,19
Size=303,1110 Size=303,842
Collapsed=0 Collapsed=0
DockId=0x00000005,0 DockId=0x00000005,0
[Window][Objects] [Window][Objects]
Pos=0,19 Pos=0,19
Size=281,307 Size=281,615
Collapsed=0 Collapsed=0
DockId=0x00000007,0 DockId=0x00000007,0
[Window][Terrain] [Window][Terrain]
Pos=0,19 Pos=0,19
Size=281,883 Size=281,615
Collapsed=0 Collapsed=0
DockId=0x00000008,0 DockId=0x00000008,0
@@ -35,7 +35,7 @@ DockId=0x00000001,2
[Window][Engine Settings] [Window][Engine Settings]
Pos=0,19 Pos=0,19
Size=281,307 Size=281,615
Collapsed=0 Collapsed=0
DockId=0x00000007,1 DockId=0x00000007,1
@@ -51,7 +51,7 @@ DockId=0x00000007,0
[Window][DockSpace] [Window][DockSpace]
Pos=0,0 Pos=0,0
Size=2048,1129 Size=1584,861
Collapsed=0 Collapsed=0
[Window][Add Object] [Window][Add Object]
@@ -66,14 +66,14 @@ Collapsed=0
DockId=0x0000000C,0 DockId=0x0000000C,0
[Window][Log Window] [Window][Log Window]
Pos=652,636 Pos=641,636
Size=649,225 Size=638,225
Collapsed=0 Collapsed=0
DockId=0x00000006,0 DockId=0x00000006,0
[Window][Render Stats] [Window][Render Stats]
Pos=0,904 Pos=0,636
Size=1743,225 Size=1279,225
Collapsed=0 Collapsed=0
DockId=0x00000004,0 DockId=0x00000004,0
@@ -81,7 +81,7 @@ DockId=0x00000004,0
DockSpace ID=0xC0DFADC4 Pos=8,27 Size=1568,826 Split=X DockSpace ID=0xC0DFADC4 Pos=8,27 Size=1568,826 Split=X
DockNode ID=0x00000001 Parent=0xC0DFADC4 SizeRef=330,1094 Selected=0x393905AB DockNode ID=0x00000001 Parent=0xC0DFADC4 SizeRef=330,1094 Selected=0x393905AB
DockNode ID=0x00000003 Parent=0xC0DFADC4 SizeRef=1700,1094 CentralNode=1 DockNode ID=0x00000003 Parent=0xC0DFADC4 SizeRef=1700,1094 CentralNode=1
DockSpace ID=0xCCBD8CF7 Window=0x3DA2F1DE Pos=0,19 Size=2048,1110 Split=X DockSpace ID=0xCCBD8CF7 Window=0x3DA2F1DE Pos=0,19 Size=1584,842 Split=X
DockNode ID=0x00000002 Parent=0xCCBD8CF7 SizeRef=1743,826 Split=Y DockNode ID=0x00000002 Parent=0xCCBD8CF7 SizeRef=1743,826 Split=Y
DockNode ID=0x0000000A Parent=0x00000002 SizeRef=1568,599 Split=X DockNode ID=0x0000000A Parent=0x00000002 SizeRef=1568,599 Split=X
DockNode ID=0x00000009 Parent=0x0000000A SizeRef=281,974 Split=Y Selected=0x031DC75C DockNode ID=0x00000009 Parent=0x0000000A SizeRef=281,974 Split=Y Selected=0x031DC75C

View File

@@ -68,6 +68,8 @@ private:
bool showLogWindow; bool showLogWindow;
bool showStatsWindow; bool showStatsWindow;
int m_SideCount = 0;
static const int FRAME_HISTORY_COUNT = 3600; // 1min secondes <20> 60 FPS static const int FRAME_HISTORY_COUNT = 3600; // 1min secondes <20> 60 FPS
float m_frameTimeHistory[FRAME_HISTORY_COUNT] = {}; float m_frameTimeHistory[FRAME_HISTORY_COUNT] = {};
int m_frameTimeHistoryIndex = 0; int m_frameTimeHistoryIndex = 0;

View File

@@ -201,7 +201,8 @@ protected:
public: public:
ModelClass(); ModelClass();
ModelClass(const ModelClass&); ModelClass(const ModelClass&) = delete;
ModelClass& operator=(const ModelClass&) = delete;
~ModelClass(); ~ModelClass();
//bool Initialize(ID3D11Device*, ID3D11DeviceContext*, char*, std::vector<ID3D11ShaderResourceView*>); //bool Initialize(ID3D11Device*, ID3D11DeviceContext*, char*, std::vector<ID3D11ShaderResourceView*>);
@@ -240,7 +241,6 @@ private:
bool InitializeBuffers(ID3D11Device*); bool InitializeBuffers(ID3D11Device*);
void ShutdownBuffers(); void ShutdownBuffers();
void RenderBuffers(ID3D11DeviceContext*); void RenderBuffers(ID3D11DeviceContext*);
bool LoadTextures(ID3D11Device*, ID3D11DeviceContext*, vector<string> filename);
void ReleaseTextures(); void ReleaseTextures();
bool LoadModel(char*); bool LoadModel(char*);

View File

@@ -32,6 +32,9 @@ public:
Object(); Object();
~Object(); ~Object();
Object(const Object&) = delete;
Object& operator=(const Object&) = delete;
void SetScaleMatrix(XMMATRIX scaleMatrix); void SetScaleMatrix(XMMATRIX scaleMatrix);
void SetRotateMatrix(XMMATRIX rotateMatrix); void SetRotateMatrix(XMMATRIX rotateMatrix);
void SetTranslateMatrix(XMMATRIX translateMatrix); void SetTranslateMatrix(XMMATRIX translateMatrix);
@@ -50,7 +53,6 @@ public:
XMVECTOR GetPosition(); XMVECTOR GetPosition();
XMVECTOR GetRotation(); XMVECTOR GetRotation();
void Render(ID3D11DeviceContext* deviceContext);
XMVECTOR GetScale(); XMVECTOR GetScale();
void SetVelocity(XMVECTOR); void SetVelocity(XMVECTOR);
@@ -149,9 +151,4 @@ private:
float m_initialStretch = 0.0f; float m_initialStretch = 0.0f;
float m_springConstant = 10.0f; float m_springConstant = 10.0f;
bool m_instancingEnabled;
int m_instanceCount;
ID3D11Buffer* m_instanceBuffer;
std::vector<XMMATRIX> m_instanceTransforms;
}; };

View File

@@ -1286,7 +1286,7 @@ void ApplicationClass::AddKobject(std::wstring& filepath)
string filename = p.stem().string(); string filename = p.stem().string();
size_t convertedChars = 0; size_t convertedChars = 0;
wcstombs_s(&convertedChars, modelFilename, sizeof(modelFilename), filepath.c_str(), _TRUNCATE); (void)wcstombs_s(&convertedChars, modelFilename, sizeof(modelFilename), filepath.c_str(), _TRUNCATE);
filesystem::current_path(m_WFolder); filesystem::current_path(m_WFolder);
@@ -1672,7 +1672,7 @@ bool ApplicationClass::RenderPass(const std::vector<std::reference_wrapper<std::
int renderCount = 0; int renderCount = 0;
ConstructFrustum(); //ConstructFrustum();
for (const auto& RenderQueue : RenderQueues) for (const auto& RenderQueue : RenderQueues)
{ {
@@ -1697,7 +1697,6 @@ bool ApplicationClass::RenderPass(const std::vector<std::reference_wrapper<std::
object->UpdatePosition(m_Timer->GetTime()); object->UpdatePosition(m_Timer->GetTime());
} }
if (!object->IsVisible()) if (!object->IsVisible())
{ {
continue; continue;

View File

@@ -644,19 +644,20 @@ void imguiManager::WidgetTerrainWindow(ApplicationClass* app)
ImGui::Separator(); ImGui::Separator();
// int input area for the number of cubes // Input for the number of cubes on each side
static int numCubes = 10; ImGui::Text("Number of cubes on each side: ");
ImGui::InputInt("Number of Cubes", &numCubes); ImGui::SameLine();
if (numCubes < 1) ImGui::InputInt("##SideCount", &m_SideCount);
if (m_SideCount < 1)
{ {
numCubes = 1; m_SideCount = 1;
} }
ImGui::Separator(); ImGui::Separator();
if (ImGui::Button("Generate Big Cube Terrain")) if (ImGui::Button("Generate BigCube Terrain"))
{ {
app->CreateBigCube(numCubes); app->CreateBigCube(m_SideCount);
} }
ImGui::Separator(); ImGui::Separator();

View File

@@ -6,16 +6,23 @@ ModelClass::ModelClass()
m_vertexBuffer = 0; m_vertexBuffer = 0;
m_indexBuffer = 0; m_indexBuffer = 0;
m_model = 0; m_model = 0;
m_vertexCount = 0;
m_indexCount = 0;
m_Textures.diffuse.clear();
m_Textures.normal.clear();
m_Textures.specular.clear();
m_Textures.alpha.clear();
m_Textures.diffusePaths.clear();
m_Textures.normalPaths.clear();
m_Textures.specularPaths.clear();
m_Textures.alphaPaths.clear();
} }
ModelClass::ModelClass(const ModelClass& other)
{
}
ModelClass::~ModelClass() ModelClass::~ModelClass()
{ {
// Destructor
Shutdown();
} }
bool ModelClass::Initialize(ID3D11Device* device, ID3D11DeviceContext* deviceContext, char* modelFilename, const TextureContainer& textures) { bool ModelClass::Initialize(ID3D11Device* device, ID3D11DeviceContext* deviceContext, char* modelFilename, const TextureContainer& textures) {
@@ -169,23 +176,10 @@ bool ModelClass::InitializeBuffers(ID3D11Device* device)
void ModelClass::ShutdownBuffers() void ModelClass::ShutdownBuffers()
{ {
// Release the index buffer. if (m_indexBuffer) { m_indexBuffer->Release(); m_indexBuffer = nullptr; }
if (m_indexBuffer) if (m_vertexBuffer) { m_vertexBuffer->Release(); m_vertexBuffer = nullptr; }
{
m_indexBuffer->Release();
m_indexBuffer = 0;
}
// Release the vertex buffer.
if (m_vertexBuffer)
{
m_vertexBuffer->Release();
m_vertexBuffer = 0;
}
} }
void ModelClass::RenderBuffers(ID3D11DeviceContext* deviceContext) void ModelClass::RenderBuffers(ID3D11DeviceContext* deviceContext)
{ {
unsigned int stride; unsigned int stride;
@@ -240,94 +234,110 @@ bool ModelClass::LoadModel(char* filename)
bool ModelClass::LoadObjModel(char* filename) bool ModelClass::LoadObjModel(char* filename)
{ {
// Lecture optimis<69>e du fichier en mode binaire
std::ifstream fin(filename, std::ios::in | std::ios::binary);
if (!fin)
{
Logger::Get().Log("<EFBFBD>chec d'ouverture du fichier mod<6F>le", __FILE__, __LINE__, Logger::LogLevel::Error);
return false;
}
std::string line; // Lecture du fichier entier d'un coup (<28>vite la lecture ligne par ligne)
std::ifstream fin(filename); fin.seekg(0, std::ios::end);
const size_t fileSize = fin.tellg();
fin.seekg(0, std::ios::beg);
// If it could not open the file then exit. std::string fileContent;
if (!fin) fileContent.resize(fileSize);
{ fin.read(&fileContent[0], fileSize);
Logger::Get().Log("Failed to open model file", __FILE__, __LINE__, Logger::LogLevel::Error); fin.close();
return false;
}
std::vector<XMFLOAT3> temp_positions; // Pr<50>-allocation des vecteurs (<28>vite les r<>allocations)
std::vector<XMFLOAT2> temp_texcoords; const size_t estimatedVertices = fileSize / 150;
std::vector<XMFLOAT3> temp_normals; std::vector<XMFLOAT3> temp_positions;
std::vector<ModelType> temp_model; std::vector<XMFLOAT2> temp_texcoords;
std::vector<XMFLOAT3> temp_normals;
std::vector<ModelType> temp_model;
// Read the file line by line. temp_positions.reserve(estimatedVertices);
while (std::getline(fin, line)) temp_texcoords.reserve(estimatedVertices);
{ temp_normals.reserve(estimatedVertices);
std::istringstream iss(line); temp_model.reserve(estimatedVertices * 3);
std::string type;
iss >> type;
if (type == "v") // Vertex position // Analyse du contenu
{ std::istringstream iss(fileContent);
XMFLOAT3 pos; std::string line;
iss >> pos.x >> pos.y >> pos.z;
temp_positions.push_back(pos);
}
else if (type == "vt") // Texture coordinate
{
XMFLOAT2 tex;
iss >> tex.x >> tex.y;
temp_texcoords.push_back(tex);
}
else if (type == "vn") // Vertex normal
{
XMFLOAT3 norm;
iss >> norm.x >> norm.y >> norm.z;
temp_normals.push_back(norm);
}
else if (type == "f") // Face
{
int posIndex[3], texIndex[3], normIndex[3];
char slash; // To skip the slashes '/' in the .obj file format
for (int i = 0; i < 3; i++) // Each face in .obj format has 3 vertices
{
iss >> posIndex[i] >> slash >> texIndex[i] >> slash >> normIndex[i];
// Handle negative indices while (std::getline(iss, line))
if (posIndex[i] < 0) posIndex[i] += temp_positions.size() + 1; {
if (texIndex[i] < 0) texIndex[i] += temp_texcoords.size() + 1; if (line.empty() || line[0] == '#') continue;
if (normIndex[i] < 0) normIndex[i] += temp_normals.size() + 1;
}
// .obj indices start from 1, not 0 // Analyse plus rapide bas<61>e sur le premier caract<63>re
for (int i = 0; i < 3; i++) if (line[0] == 'v')
{ {
ModelType vertex; if (line[1] == ' ') // Position de sommet
vertex.x = temp_positions[posIndex[i] - 1].x; {
vertex.y = temp_positions[posIndex[i] - 1].y; XMFLOAT3 pos;
vertex.z = temp_positions[posIndex[i] - 1].z; sscanf_s(line.c_str() + 2, "%f %f %f", &pos.x, &pos.y, &pos.z);
vertex.tu = temp_texcoords[texIndex[i] - 1].x; temp_positions.push_back(pos);
vertex.tv = temp_texcoords[texIndex[i] - 1].y; }
vertex.nx = temp_normals[normIndex[i] - 1].x; else if (line[1] == 't') // Coordonn<6E>es de texture
vertex.ny = temp_normals[normIndex[i] - 1].y; {
vertex.nz = temp_normals[normIndex[i] - 1].z; XMFLOAT2 tex;
temp_model.push_back(vertex); sscanf_s(line.c_str() + 3, "%f %f", &tex.x, &tex.y);
} temp_texcoords.push_back(tex);
} }
} else if (line[1] == 'n') // Normales
{
XMFLOAT3 norm;
sscanf_s(line.c_str() + 3, "%f %f %f", &norm.x, &norm.y, &norm.z);
temp_normals.push_back(norm);
}
}
else if (line[0] == 'f')
{
int posIndex[3], texIndex[3], normIndex[3];
const char* linePtr = line.c_str() + 2; // Sauter "f "
m_vertexCount = temp_model.size(); for (int i = 0; i < 3; i++)
m_indexCount = temp_model.size(); {
// Analyse rapide du format v/vt/vn
sscanf_s(linePtr, "%d/%d/%d", &posIndex[i], &texIndex[i], &normIndex[i]);
// Create the model using the vertex count that was read in. // Avancer au prochain ensemble d'indices
m_model = new ModelType[m_vertexCount]; while (*linePtr && *linePtr != ' ') linePtr++;
for (int i = 0; i < m_vertexCount; i++) while (*linePtr == ' ') linePtr++;
{
m_model[i] = temp_model[i];
}
fin.close(); if (posIndex[i] < 0) posIndex[i] += temp_positions.size() + 1;
if (texIndex[i] < 0) texIndex[i] += temp_texcoords.size() + 1;
if (normIndex[i] < 0) normIndex[i] += temp_normals.size() + 1;
}
return true; for (int i = 0; i < 3; i++)
{
ModelType vertex{};
vertex.x = temp_positions[posIndex[i] - 1].x;
vertex.y = temp_positions[posIndex[i] - 1].y;
vertex.z = temp_positions[posIndex[i] - 1].z;
vertex.tu = temp_texcoords[texIndex[i] - 1].x;
vertex.tv = temp_texcoords[texIndex[i] - 1].y;
vertex.nx = temp_normals[normIndex[i] - 1].x;
vertex.ny = temp_normals[normIndex[i] - 1].y;
vertex.nz = temp_normals[normIndex[i] - 1].z;
temp_model.push_back(vertex);
}
}
}
// Allocation et copie efficace du mod<6F>le final
m_vertexCount = temp_model.size();
m_indexCount = temp_model.size();
m_model = new ModelType[m_vertexCount];
std::memcpy(m_model, temp_model.data(), m_vertexCount * sizeof(ModelType));
return true;
} }
bool ModelClass::LoadTxtModel(char* filename) bool ModelClass::LoadTxtModel(char* filename)
{ {
ifstream fin; ifstream fin;

View File

@@ -18,19 +18,10 @@ Object::Object()// Initialize the reference here
m_isGrounded = false; m_isGrounded = false;
m_id = NULL; m_id = NULL;
m_boundingRadius = 1.0f; m_boundingRadius = 1.0f;
m_instancingEnabled = false;
m_instanceCount = 0;
m_instanceBuffer = nullptr;
} }
Object::~Object() Object::~Object()
{ {
// Lib<69>rer le buffer d'instances
if (m_instanceBuffer)
{
m_instanceBuffer->Release();
m_instanceBuffer = nullptr;
}
} }
void Object::SetScaleMatrix(XMMATRIX scaleMatrix) void Object::SetScaleMatrix(XMMATRIX scaleMatrix)
@@ -100,45 +91,6 @@ XMVECTOR Object::GetRotation()
return XMVectorSet(rotationX, rotationY, rotationZ, 0.0f); return XMVectorSet(rotationX, rotationY, rotationZ, 0.0f);
} }
void Object::Render(ID3D11DeviceContext* deviceContext)
{
unsigned int strides[2];
unsigned int offsets[2];
ID3D11Buffer* bufferPointers[2];
// Configurer les vertex et index buffers
strides[0] = sizeof(VertexType);
offsets[0] = 0;
bufferPointers[0] = m_vertexBuffer;
// Si l'instanciation est activ<69>e
if (m_instancingEnabled && m_instanceBuffer)
{
// Configurer le buffer d'instances
strides[1] = sizeof(XMMATRIX);
offsets[1] = 0;
bufferPointers[1] = m_instanceBuffer;
// D<>finir les deux buffers (vertex et instance) sur le pipeline
deviceContext->IASetVertexBuffers(0, 2, bufferPointers, strides, offsets);
deviceContext->IASetIndexBuffer(m_indexBuffer, DXGI_FORMAT_R32_UINT, 0);
deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
// Dessiner les instances
deviceContext->DrawIndexedInstanced(m_indexCount, m_instanceCount, 0, 0, 0);
}
else
{
// Rendu normal sans instanciation
deviceContext->IASetVertexBuffers(0, 1, bufferPointers, strides, offsets);
deviceContext->IASetIndexBuffer(m_indexBuffer, DXGI_FORMAT_R32_UINT, 0);
deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
// Dessiner l'objet normalement
deviceContext->DrawIndexed(m_indexCount, 0, 0);
}
}
XMVECTOR Object::GetScale() XMVECTOR Object::GetScale()
{ {
XMFLOAT4X4 matrix; XMFLOAT4X4 matrix;
@@ -436,65 +388,3 @@ bool Object::LoadTexturesFromPath(std::vector<std::wstring>& texturePaths, Textu
return true; return true;
} }
bool Object::SetupInstancing(ID3D11Device* device, const std::vector<XMMATRIX>& instanceTransforms)
{
// Stocker les matrices de transformation
m_instanceTransforms = instanceTransforms;
m_instanceCount = static_cast<int>(instanceTransforms.size());
// Lib<69>rer le buffer d'instances existant si n<>cessaire
if (m_instanceBuffer)
{
m_instanceBuffer->Release();
m_instanceBuffer = nullptr;
}
// Cr<43>er le buffer d'instances
D3D11_BUFFER_DESC instanceBufferDesc;
ZeroMemory(&instanceBufferDesc, sizeof(instanceBufferDesc));
instanceBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
instanceBufferDesc.ByteWidth = sizeof(XMMATRIX) * m_instanceCount;
instanceBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
instanceBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
instanceBufferDesc.MiscFlags = 0;
instanceBufferDesc.StructureByteStride = 0;
D3D11_SUBRESOURCE_DATA instanceData;
ZeroMemory(&instanceData, sizeof(instanceData));
instanceData.pSysMem = instanceTransforms.data();
HRESULT result = device->CreateBuffer(&instanceBufferDesc, &instanceData, &m_instanceBuffer);
if (FAILED(result))
{
return false;
}
return true;
}
void Object::EnableInstancing(bool enabled)
{
m_instancingEnabled = enabled;
}
void Object::SetInstanceCount(int count)
{
m_instanceCount = count;
}
// Ajoutez <20>galement ces m<>thodes pour acc<63>der aux donn<6E>es d'instanciation
bool Object::IsInstancingEnabled() const
{
return m_instancingEnabled;
}
int Object::GetInstanceCount() const
{
return m_instanceCount;
}
ID3D11Buffer* Object::GetInstanceBuffer() const
{
return m_instanceBuffer;
}