Minor Update - Skybox Update - V9.3.0

This commit is contained in:
CatChow0 2025-05-01 16:41:33 +02:00
parent 0e45e0688c
commit e34b44996a
10 changed files with 172 additions and 228 deletions

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RiderProjectSettingsUpdater">
<option name="vcsConfiguration" value="2" />
<option name="singleClickDiffPreview" value="1" />
<option name="vcsConfiguration" value="3" />
</component>
</project>

View File

@ -5,14 +5,15 @@
</component>
<component name="ChangeListManager">
<list default="true" id="e81d6e08-efc7-40a0-909d-ec4943d948e9" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/enginecustom/src/inc/system/Skybox.h" afterDir="false" />
<change afterPath="$PROJECT_DIR$/enginecustom/src/src/system/Skybox.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/.idea.KhaoticEngineReborn/.idea/projectSettingsUpdater.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.KhaoticEngineReborn/.idea/projectSettingsUpdater.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/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/object.h" beforeDir="false" afterPath="$PROJECT_DIR$/enginecustom/src/inc/system/object.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/enginecustom/assets/Texture/imgui.ini" beforeDir="false" afterPath="$PROJECT_DIR$/enginecustom/assets/Texture/imgui.ini" afterDir="false" />
<change beforePath="$PROJECT_DIR$/enginecustom/enginecustom.vcxproj" beforeDir="false" afterPath="$PROJECT_DIR$/enginecustom/enginecustom.vcxproj" afterDir="false" />
<change beforePath="$PROJECT_DIR$/enginecustom/src/inc/system/applicationclass.h" beforeDir="false" afterPath="$PROJECT_DIR$/enginecustom/src/inc/system/applicationclass.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/enginecustom/src/src/system/Positionclass.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/enginecustom/src/src/system/Positionclass.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/enginecustom/src/src/system/applicationclass.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/enginecustom/src/src/system/applicationclass.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/object.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/enginecustom/src/src/system/object.cpp" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -26,10 +27,9 @@
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="HighlightingSettingsPerFile">
<setting file="file://$PROJECT_DIR$/../../../../../Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/shared/windef.h" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/../../../../../Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/um/DirectXMath.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/src/src/shader/CelShadingShader.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/../../IDE_VS/VC/Tools/MSVC/14.38.33130/include/type_traits" root0="SKIP_HIGHLIGHTING" />
</component>
<component name="MetaFilesCheckinStateConfiguration" checkMetaFiles="true" />
<component name="ProblemsViewState">
@ -60,21 +60,13 @@
"nodejs_package_manager_path": "npm",
"settings.editor.selected.configurable": "preferences.pluginManager",
"vue.rearranger.settings.migration": "true"
},
"keyToStringList": {
"rider.external.source.directories": [
"C:\\Users\\arivas\\AppData\\Roaming\\JetBrains\\Rider2024.1\\resharper-host\\DecompilerCache",
"C:\\Users\\arivas\\AppData\\Roaming\\JetBrains\\Rider2024.1\\resharper-host\\SourcesCache",
"C:\\Users\\arivas\\AppData\\Local\\Symbols\\src"
]
}
}]]></component>
<component name="RunManager" selected="C++ Project.enginecustom">
<component name="RunManager" selected="C/C++ Project.enginecustom">
<configuration name="KhaoticDemo" type="CppProject" factoryName="C++ Project">
<configuration_1>
<configuration_1 setup="1">
<option name="CONFIGURATION" value="Debug" />
<option name="PLATFORM" value="x64" />
<option name="PROJECT_FILE_PATH" value="$PROJECT_DIR$/KhaoticDemo/KhaoticDemo.vcxproj" />
<option name="CURRENT_LAUNCH_PROFILE" value="Local" />
<option name="EXE_PATH" value="$(LocalDebuggerCommand)" />
<option name="PROGRAM_PARAMETERS" value="$(LocalDebuggerCommandArguments)" />
@ -82,18 +74,19 @@
<option name="PASS_PARENT_ENVS" value="1" />
<option name="USE_EXTERNAL_CONSOLE" value="0" />
<option name="TERMINAL_INTERACTION_BEHAVIOR" value="AUTO_DETECT" />
<option name="PROJECT_FILE_PATH" value="$PROJECT_DIR$/KhaoticDemo/KhaoticDemo.vcxproj" />
</configuration_1>
<option name="DEFAULT_PROJECT_PATH" value="$PROJECT_DIR$/KhaoticDemo/KhaoticDemo.vcxproj" />
<option name="PROJECT_FILE_PATH" value="$PROJECT_DIR$/KhaoticDemo/KhaoticDemo.vcxproj" />
<option name="AUTO_SELECT_PRIORITY" value="0" />
<method v="2">
<option name="Build" />
</method>
</configuration>
<configuration name="enginecustom" type="CppProject" factoryName="C++ Project">
<configuration_1>
<configuration_1 setup="1">
<option name="CONFIGURATION" value="Debug" />
<option name="PLATFORM" value="x64" />
<option name="PROJECT_FILE_PATH" value="$PROJECT_DIR$/enginecustom/enginecustom.vcxproj" />
<option name="CURRENT_LAUNCH_PROFILE" value="Local" />
<option name="EXE_PATH" value="$(LocalDebuggerCommand)" />
<option name="PROGRAM_PARAMETERS" value="$(LocalDebuggerCommandArguments)" />
@ -101,11 +94,11 @@
<option name="PASS_PARENT_ENVS" value="1" />
<option name="USE_EXTERNAL_CONSOLE" value="0" />
<option name="TERMINAL_INTERACTION_BEHAVIOR" value="AUTO_DETECT" />
<option name="PROJECT_FILE_PATH" value="$PROJECT_DIR$/enginecustom/enginecustom.vcxproj" />
</configuration_1>
<configuration_2>
<configuration_2 setup="1">
<option name="CONFIGURATION" value="Release" />
<option name="PLATFORM" value="x64" />
<option name="PROJECT_FILE_PATH" value="$PROJECT_DIR$/enginecustom/enginecustom.vcxproj" />
<option name="CURRENT_LAUNCH_PROFILE" value="Local" />
<option name="EXE_PATH" value="$(TargetPath)" />
<option name="PROGRAM_PARAMETERS" value="" />
@ -113,20 +106,10 @@
<option name="PASS_PARENT_ENVS" value="1" />
<option name="USE_EXTERNAL_CONSOLE" value="0" />
<option name="TERMINAL_INTERACTION_BEHAVIOR" value="AUTO_DETECT" />
<option name="PROJECT_FILE_PATH" value="$PROJECT_DIR$/enginecustom/enginecustom.vcxproj" />
</configuration_2>
<configuration_3>
<option name="CONFIGURATION" value="" />
<option name="PLATFORM" value="" />
<option name="PROJECT_FILE_PATH" value="$PROJECT_DIR$/enginecustom/enginecustom.vcxproj" />
<option name="CURRENT_LAUNCH_PROFILE" value="Local" />
<option name="EXE_PATH" value="$(TargetPath)" />
<option name="PROGRAM_PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="$(ProjectDir)" />
<option name="PASS_PARENT_ENVS" value="1" />
<option name="USE_EXTERNAL_CONSOLE" value="0" />
<option name="TERMINAL_INTERACTION_BEHAVIOR" value="AUTO_DETECT" />
</configuration_3>
<option name="DEFAULT_PROJECT_PATH" value="$PROJECT_DIR$/enginecustom/enginecustom.vcxproj" />
<option name="PROJECT_FILE_PATH" value="$PROJECT_DIR$/enginecustom/enginecustom.vcxproj" />
<option name="AUTO_SELECT_PRIORITY" value="0" />
<method v="2">
<option name="Build" />
@ -184,6 +167,7 @@
<workItem from="1743355837694" duration="1514000" />
<workItem from="1743370106270" duration="901000" />
<workItem from="1743505399891" duration="2361000" />
<workItem from="1746106963725" duration="3390000" />
</task>
<task id="LOCAL-00001" summary="Minor update - viewport window tweak">
<option name="closed" value="true" />

View File

@ -1,89 +1,49 @@
[Window][DockSpace]
Pos=0,0
Size=2048,1129
Collapsed=0
[Window][Debug##Default]
Pos=60,60
Size=400,400
Collapsed=0
[Window][Khaotic Engine]
Pos=1233,27
Size=343,826
Pos=1687,27
Size=353,1094
Collapsed=0
DockId=0x00000005,0
DockId=0x00000002,0
[Window][Objects]
Pos=8,27
Size=522,826
Size=345,896
Collapsed=0
DockId=0x00000009,0
DockId=0x00000005,0
[Window][Engine Settings]
Pos=1687,27
Size=353,1094
Collapsed=0
DockId=0x00000002,1
[Window][Terrain]
Pos=8,27
Size=250,974
Size=345,896
Collapsed=0
DockId=0x00000007,0
DockId=0x00000005,1
[Window][Light]
Pos=8,27
Size=290,866
Collapsed=0
DockId=0x00000007,1
[Window][Shader Manager]
Pos=8,27
Size=330,487
Collapsed=0
DockId=0x00000001,2
[Window][Engine Settings]
Pos=8,27
Size=289,974
Collapsed=0
DockId=0x00000009,0
[Window][DockSpace Demo]
Size=1584,861
Collapsed=0
[Window][Render Window]
Pos=8,27
Size=1559,974
Collapsed=0
DockId=0x00000009,0
[Window][DockSpace]
Pos=0,0
Size=1584,861
Collapsed=0
[Window][Add Object]
Pos=1188,0
Size=396,430
Collapsed=0
[Window][Log]
Pos=8,518
Size=1568,335
Collapsed=0
DockId=0x0000000C,0
[Window][Log Window]
Pos=8,627
Size=1568,226
Pos=8,925
Size=345,196
Collapsed=0
DockId=0x00000006,0
[Docking][Data]
DockSpace ID=0xC0DFADC4 Pos=8,27 Size=1568,826 Split=X
DockNode ID=0x00000001 Parent=0xC0DFADC4 SizeRef=330,1094 Selected=0x393905AB
DockNode ID=0x00000003 Parent=0xC0DFADC4 SizeRef=1700,1094 CentralNode=1
DockSpace ID=0xCCBD8CF7 Window=0x3DA2F1DE Pos=8,27 Size=1568,826 Split=X
DockNode ID=0x00000009 Parent=0xCCBD8CF7 SizeRef=522,974 Selected=0x031DC75C
DockNode ID=0x0000000D Parent=0xCCBD8CF7 SizeRef=1044,974 Split=X
DockNode ID=0x00000002 Parent=0x0000000D SizeRef=699,826 Split=Y
DockNode ID=0x00000004 Parent=0x00000002 SizeRef=2032,866 Split=Y
DockNode ID=0x0000000B Parent=0x00000004 SizeRef=1568,637 Split=X
DockNode ID=0x00000007 Parent=0x0000000B SizeRef=250,826 Selected=0x393905AB
DockNode ID=0x00000008 Parent=0x0000000B SizeRef=971,826 CentralNode=1 Selected=0x031DC75C
DockNode ID=0x0000000C Parent=0x00000004 SizeRef=1568,335 Selected=0x139FDA3F
DockNode ID=0x00000006 Parent=0x00000002 SizeRef=2032,226 Selected=0xAB74BEE9
DockNode ID=0x00000005 Parent=0x0000000D SizeRef=343,826 Selected=0x9F035453
DockSpace ID=0xCCBD8CF7 Window=0x3DA2F1DE Pos=8,27 Size=2032,1094 Split=X
DockNode ID=0x00000003 Parent=0xCCBD8CF7 SizeRef=345,826 Split=Y Selected=0x393905AB
DockNode ID=0x00000005 Parent=0x00000003 SizeRef=345,896 Selected=0x393905AB
DockNode ID=0x00000006 Parent=0x00000003 SizeRef=345,196 Selected=0x321620B2
DockNode ID=0x00000004 Parent=0xCCBD8CF7 SizeRef=1221,826 Split=X
DockNode ID=0x00000001 Parent=0x00000004 SizeRef=866,826 CentralNode=1
DockNode ID=0x00000002 Parent=0x00000004 SizeRef=353,826 Selected=0x9F035453

1
enginecustom/demo.ker Normal file
View File

@ -0,0 +1 @@
0 86 111.063 12.7056 0 0 -0 0 1 1 1 Content/Assets/Kobject/86.obj CEL_SHADING 1 Cube 1 1

View File

@ -66,6 +66,7 @@
<ClCompile Include="src\src\system\physics.cpp" />
<ClCompile Include="src\src\system\Positionclass.cpp" />
<ClCompile Include="src\src\system\rendertextureclass.cpp" />
<ClCompile Include="src\src\system\Skybox.cpp" />
<ClCompile Include="src\src\system\Spriteclass.cpp" />
<ClCompile Include="src\src\system\Systemclass.cpp" />
<ClCompile Include="src\src\system\textclass.cpp" />
@ -125,6 +126,7 @@
<ClInclude Include="src\inc\system\Positionclass.h" />
<ClInclude Include="src\inc\system\rendertextureclass.h" />
<ClInclude Include="src\inc\system\sceneManager.h" />
<ClInclude Include="src\inc\system\Skybox.h" />
<ClInclude Include="src\inc\system\Spriteclass.h" />
<ClInclude Include="src\inc\system\systemclass.h" />
<ClInclude Include="src\inc\system\textclass.h" />

View File

@ -0,0 +1,30 @@
#pragma once
#include <vector>
#include "d3dclass.h"
#include "object.h"
class Skybox
{
public:
Skybox();
~Skybox();
void Initialize(D3DClass* d3dClassRef); // Get all the required references
Object* ConstructSkybox();
// Variables
std::vector<ID3D11ShaderResourceView*> textures;
std::vector<XMMATRIX> translations;
private:
D3DClass* m_d3dClassRef; // Reference to the D3DClass instance
Object* m_Skybox;
};

View File

@ -30,8 +30,10 @@
#include "reflectionshaderclass.h"
#include "physics.h"
#include "frustum.h"
#include <fstream>
#include "skybox.h"
#include <fstream>
#include <WICTextureLoader.h>
#include <comdef.h> // Pour _com_error
#include <chrono>
@ -167,13 +169,10 @@ private:
bool RenderReflectionToTexture();
bool RenderPass(const std::vector<std::reference_wrapper<std::vector<Object*>>>& RenderQueues, XMFLOAT4* diffuse, XMFLOAT4* position, XMFLOAT4* ambient, XMMATRIX view, XMMATRIX projection);
void ConstructSkybox(); // Construct the skybox
void UpdateSkyboxPosition(); // Update the skybox position
bool RenderSkybox(XMMATRIX view, XMMATRIX projection); // Render the skybox
void UpdateSkyboxPosition();
public :
std::vector<ID3D11ShaderResourceView*> textures;
std::vector<ID3D11ShaderResourceView*> m_SkyboxTextures;
private :
@ -203,7 +202,6 @@ private :
int m_screenWidth, m_screenHeight;
CameraClass* m_Camera;
PositionClass* m_Position;
std::vector<XMMATRIX> m_SkyboxInitialTranslations;
// ------------------------------------ //
// ------------- OBJECTS -------------- //

View File

@ -12,7 +12,6 @@ PositionClass::PositionClass()
m_rightTurnSpeed = 0.0f;
m_horizontalTurnSpeed = 0.0f;
m_verticalTurnSpeed = 0.0f;
m_verticalTurnSpeed = 0.0f;
m_cameraSpeed = 4.0f;
m_speed = m_cameraSpeed;
}

View File

@ -0,0 +1,69 @@
#include "Skybox.h"
Skybox::Skybox()
{
}
Skybox::~Skybox()
{
for (auto& texture : textures)
{
if (texture)
{
texture->Release();
texture = nullptr;
}
}
textures.clear();
translations.clear();
}
void Skybox::Initialize(D3DClass* d3dClassRef)
{
m_d3dClassRef = d3dClassRef;
}
Object* Skybox::ConstructSkybox()
{
Logger::Get().Log("Construct skybox", __FILE__, __LINE__, Logger::LogLevel::Initialize);
char modelFilename[128];
strcpy_s(modelFilename, "assets/Model/OBJ/invertcube.obj");
textures.clear();
std::vector<std::wstring> skyboxTextures = {
L"assets/Skybox/skybox_front.png",
L"assets/Skybox/skybox_back.png",
L"assets/Skybox/skybox_left.png",
L"assets/Skybox/skybox_right.png",
L"assets/Skybox/skybox_top.png",
L"assets/Skybox/skybox_bottom.png"
};
// Load the textures
for (const auto& textureFilename : skyboxTextures)
{
ID3D11ShaderResourceView* texture = nullptr;
HRESULT result = DirectX::CreateWICTextureFromFile(m_d3dClassRef->GetDevice(), m_d3dClassRef->GetDeviceContext(), textureFilename.c_str(), nullptr, &texture);
if (FAILED(result))
{
Logger::Get().Log("Failed to load texture: " + std::string(textureFilename.begin(), textureFilename.end()), __FILE__, __LINE__, Logger::LogLevel::Error);
return nullptr;
}
textures.push_back(texture);
}
// Create the model object
m_Skybox = new Object();
HRESULT result = m_Skybox->Initialize(m_d3dClassRef->GetDevice(), m_d3dClassRef->GetDeviceContext(), modelFilename, textures);
if (!result)
{
Logger::Get().Log("Could not initialize the skybox model object", __FILE__, __LINE__, Logger::LogLevel::Error);
delete m_Skybox;
return nullptr;
}
m_Skybox->SetTranslateMatrix(XMMatrixTranslation(0.0f, 0.0f, 0.0f)); // Set the initial translation of the skybox
m_Skybox->SetActiveShader(ShaderType::SKYBOX);
return m_Skybox; // Return the constructed skybox object
}

View File

@ -81,6 +81,7 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd,
m_RenderQueues.push_back(std::ref(m_object));
m_RenderQueues.push_back(std::ref(m_cubes));
m_RenderQueues.push_back(std::ref(m_terrainChunk));
m_RenderQueues.push_back(std::ref(m_Skybox));
m_screenWidth = screenWidth;
m_screenHeight = screenHeight;
@ -454,7 +455,10 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd,
m_PhysicsThread = std::thread(&ApplicationClass::PhysicsThreadFunction, this);
ConstructSkybox();
//ConstructSkyboxWithPlanes();
Skybox* skybox = new Skybox;
skybox->Initialize(m_Direct3D);
m_Skybox.push_back(skybox->ConstructSkybox());
}
catch (const std::exception& e)
@ -1026,20 +1030,7 @@ bool ApplicationClass::Render(float rotation, float x, float y, float z, float t
diffuseColor, lightPosition, ambientColor);
UpdateSkyboxPosition(); // Update the position of the skybox to match the camera position.
// ------------------------------------------------------------- //
// --------------------- Render the skybox --------------------- //
// ------------------------------------------------------------- //
m_Direct3D->TurnZBufferOff(); // Disable the Z buffer for rendering the skybox.
result = RenderSkybox(viewMatrix, projectionMatrix); // Render the skybox.
if (!result)
{
Logger::Get().Log("Could not render the skybox", __FILE__, __LINE__, Logger::LogLevel::Error);
return false;
}
m_Direct3D->TurnZBufferOn(); // Enable the Z buffer after rendering the skybox.
// -------------------------------------------------------- //
@ -2010,70 +2001,6 @@ bool ApplicationClass::RenderPass(const std::vector<std::reference_wrapper<std::
return true;
}
void ApplicationClass::ConstructSkybox() {
Logger::Get().Log("Initializing skybox", __FILE__, __LINE__, Logger::LogLevel::Initialize);
char modelFilename[128];
strcpy_s(modelFilename, "assets/Model/OBJ/plane.obj");
// Liste des fichiers de texture pour chaque face du skybox
std::vector<std::wstring> skyboxTextures = {
L"assets/Skybox/skybox_front.png",
L"assets/Skybox/skybox_back.png",
L"assets/Skybox/skybox_left.png",
L"assets/Skybox/skybox_right.png",
L"assets/Skybox/skybox_top.png",
L"assets/Skybox/skybox_bottom.png"
};
// Charger les textures
std::vector<ID3D11ShaderResourceView*> textures;
for (const auto& textureFilename : skyboxTextures)
{
ID3D11ShaderResourceView* texture = nullptr;
HRESULT result = DirectX::CreateWICTextureFromFile(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), textureFilename.c_str(), nullptr, &texture);
if (FAILED(result))
{
Logger::Get().Log("Failed to load skybox texture: " + std::string(textureFilename.begin(), textureFilename.end()), __FILE__, __LINE__, Logger::LogLevel::Error);
return;
}
textures.push_back(texture);
}
// Créer les 6 faces du skybox
std::vector<XMMATRIX> translations = {
XMMatrixTranslation(0.0f, 0.0f, 1.0f), // Front
XMMatrixTranslation(0.0f, 0.0f, -1.0f), // Back
XMMatrixTranslation(-1.0f, 0.0f, 0.0f), // Left
XMMatrixTranslation(1.0f, 0.0f, 0.0f), // Right
XMMatrixTranslation(0.0f, 1.0f, 0.0f), // Top
XMMatrixTranslation(0.0f, -1.0f, 0.0f) // Bottom
};
std::vector<XMMATRIX> rotations = {
XMMatrixRotationRollPitchYaw(-XM_PIDIV2, 0, 0.0f), // Front
XMMatrixRotationRollPitchYaw(XM_PIDIV2, 0, 0.0f), // Back
XMMatrixRotationRollPitchYaw(XM_PIDIV2, XM_PIDIV2, 0.0f), // Left
XMMatrixRotationRollPitchYaw(XM_PIDIV2, -XM_PIDIV2, 0.0f), // Right
XMMatrixRotationRollPitchYaw(XM_PI, 0.0f, 0.0f), // top
XMMatrixRotationRollPitchYaw(0.0f, 0.0f, 0.0f) // Bottom
};
for (int i = 0; i < 6; ++i)
{
Object* face = new Object();
face->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), modelFilename, { textures[i] });
face->SetScaleMatrix(XMMatrixScaling(2.01f, 2.01f, 2.01f));
face->SetRotateMatrix(rotations[i]);
face->SetTranslateMatrix(translations[i]);
face->SetActiveShader(ShaderType::SKYBOX);
m_Skybox.push_back(face);
m_SkyboxInitialTranslations.push_back(translations[i]);
}
Logger::Get().Log("Skybox initialized", __FILE__, __LINE__, Logger::LogLevel::Initialize);
}
void ApplicationClass::ConstructFrustum()
{
XMMATRIX projectionMatrix = m_Direct3D->GetProjectionMatrix();
@ -2083,6 +2010,20 @@ void ApplicationClass::ConstructFrustum()
m_FrustumCulling.ConstructFrustum(SCREEN_DEPTH, projectionMatrix, viewMatrix);
}
// Update the position of the skybox based on the camera position
void ApplicationClass::UpdateSkyboxPosition()
{
if (m_Skybox.empty())
{
Logger::Get().Log("Skybox is empty", __FILE__, __LINE__, Logger::LogLevel::Error);
return;
}
m_Skybox[0]->SetTranslateMatrix(XMMatrixTranslation(m_Camera->GetPosition().x, m_Camera->GetPosition().y, m_Camera->GetPosition().z));
}
bool ApplicationClass::RenderPhysics(bool keyLeft, bool keyRight, bool keyUp, bool keyDown, float deltaTime) {
const float maxSpeed = 50.0f; // Limite de vitesse maximale
@ -2190,47 +2131,6 @@ void ApplicationClass::PhysicsThreadFunction()
}
}
void ApplicationClass::UpdateSkyboxPosition() {
XMFLOAT3 cameraPositionFloat3 = m_Camera->GetPosition();
XMVECTOR cameraPosition = XMLoadFloat3(&cameraPositionFloat3);
for (size_t i = 0; i < m_Skybox.size(); ++i) {
Object* face = m_Skybox[i];
XMMATRIX initialTranslation = m_SkyboxInitialTranslations[i];
XMVECTOR initialTranslationVector = initialTranslation.r[3];
XMVECTOR newTranslation = XMVectorAdd(cameraPosition, initialTranslationVector);
XMMATRIX translateMatrix = XMMatrixTranslationFromVector(newTranslation);
face->SetTranslateMatrix(translateMatrix);
}
}
bool ApplicationClass::RenderSkybox(XMMATRIX view, XMMATRIX projection) {
bool result;
XMMATRIX worldMatrix, scaleMatrix, rotateMatrix, translateMatrix, srMatrix;
for (auto& face : m_Skybox) {
if (face == nullptr) {
Logger::Get().Log("Skybox face is null", __FILE__, __LINE__, Logger::LogLevel::Error);
return false;
}
scaleMatrix = face->GetScaleMatrix();
rotateMatrix = face->GetRotateMatrix();
translateMatrix = face->GetTranslateMatrix();
srMatrix = XMMatrixMultiply(scaleMatrix, rotateMatrix);
worldMatrix = XMMatrixMultiply(srMatrix, translateMatrix);
face->Render(m_Direct3D->GetDeviceContext());
result = m_ShaderManager->RenderTextureShader(m_Direct3D->GetDeviceContext(), face->GetIndexCount(), worldMatrix, view, projection, face->GetTexture(0));
if (!result)
{
Logger::Get().Log("Could not render the model using the texture shader", __FILE__, __LINE__, Logger::LogLevel::Error);
return false;
}
}
return true;
}
std::string ApplicationClass::ConvertWStringToString(const std::wstring& wstr)
{
if (wstr.empty()) return std::string();