Commit 67bf391c authored by Administrator's avatar Administrator
Browse files

re-structured source into multiple layers

parent 7402f027
...@@ -175,14 +175,17 @@ void Box::Update(float dt) noexcept ...@@ -175,14 +175,17 @@ void Box::Update(float dt) noexcept
// eyePosition = XMVectorSet(20.0f * sin, 10.0f, -20.0f * cos, 1.0f); // eyePosition = XMVectorSet(20.0f * sin, 10.0f, -20.0f * cos, 1.0f);
//}; //};
DirectX::XMMATRIX Box::GetTransformXM() const noexcept DirectX::XMMATRIX Box::GetTransformXM(Graphics& gfx) const noexcept
{ {
/*return DirectX::XMMatrixRotationRollPitchYaw(pitch, yaw, roll) * /*return DirectX::XMMatrixRotationRollPitchYaw(pitch, yaw, roll) *
DirectX::XMMatrixTranslation(r, 0.0f, 0.0f) * DirectX::XMMatrixTranslation(r, 0.0f, 0.0f) *
DirectX::XMMatrixRotationRollPitchYaw(theta, phi, chi) * DirectX::XMMatrixRotationRollPitchYaw(theta, phi, chi) *
DirectX::XMMatrixTranslation(0.0f, 0.0f, 20.0f);*/ DirectX::XMMatrixTranslation(0.0f, 0.0f, 20.0f);*/
DirectX::XMMATRIX lookAtMatrix = gfx.getLookAtMatrix();
return return
DirectX::XMMatrixTranslation(dx, dy, dz) DirectX::XMMatrixTranslation(dx, dy, dz)
* DirectX::XMMatrixLookAtLH(eyePosition, focusPosition, upDirection); //* DirectX::XMMatrixLookAtLH(eyePosition, focusPosition, upDirection);
* lookAtMatrix;
} }
\ No newline at end of file
...@@ -11,7 +11,7 @@ public: ...@@ -11,7 +11,7 @@ public:
void Update(float dt) noexcept override; void Update(float dt) noexcept override;
//void UpdateCamera(float sin, float cos) noexcept; //void UpdateCamera(float sin, float cos) noexcept;
//void SetCamera(DirectX::XMVECTOR upDirection, DirectX::XMVECTOR eyePosition, DirectX::XMVECTOR focusPosition) noexcept; //void SetCamera(DirectX::XMVECTOR upDirection, DirectX::XMVECTOR eyePosition, DirectX::XMVECTOR focusPosition) noexcept;
DirectX::XMMATRIX GetTransformXM() const noexcept override; DirectX::XMMATRIX GetTransformXM(Graphics& gfx) const noexcept override;
private: private:
//StructVertex vertices[24]; //StructVertex vertices[24];
// trasformation // trasformation
......
#include "CoreHandler.h"
CoreHandler::CoreHandler(Logger& logger)
{
// init local variable
seed = 0.0f;
seed = int(seed) % 10000;
};
void CoreHandler::CoreProcess(Window& window, Graphics& gfx, Logger& logger)
{
// Display background and set depthstencil
window.GetGfx().RendorFrame();
// Set camera
SetCamera(window, logger);
// Draw all scenes
window.DrawScenes(window.GetGfx(), logger);
// Set view port and present
window.GetGfx().EndFrame();
};
void CoreHandler::SetCamera(Window& window, Logger& logger)
{
// Put camera calculation logic here
seed++;
auto dt = sin(seed / 1000);
logger.PutLog("seed", std::to_string(seed));
logger.PutLog("dt", std::to_string(dt));
auto sinValue = sin(seed / 5000);
auto cosValue = cos(seed / 5000);
// Set camera
DirectX::XMVECTOR eyePosition = DirectX::XMVectorSet(5.0f * sinValue, 3.0f, -5.0f * cosValue, 1.0f);
DirectX::XMVECTOR focusPosition = DirectX::XMVectorZero();
DirectX::XMVECTOR upDirection = DirectX::XMVectorSet(0.0f, 1.0f, 0.0f, 1.0f);
window.GetGfx().SetCamera(logger, eyePosition, focusPosition, upDirection);
}
\ No newline at end of file
#pragma once
#include "Window.h"
#include "Graphics.h"
#include "Logger.h"
class CoreHandler
{
public:
CoreHandler(Logger& logger);
void CoreProcess(Window& window, Graphics& gfx, Logger& logger);
void SetCamera(Window& window, Logger& logger);
private:
double seed;
};
\ No newline at end of file
...@@ -34,31 +34,4 @@ void Drawable::AddIndexBuffer(std::unique_ptr<IndexBuffer> ibuf) noexcept ...@@ -34,31 +34,4 @@ void Drawable::AddIndexBuffer(std::unique_ptr<IndexBuffer> ibuf) noexcept
assert("Attempting to add index buffer a second time" && pIndexBuffer == nullptr); assert("Attempting to add index buffer a second time" && pIndexBuffer == nullptr);
pIndexBuffer = ibuf.get(); pIndexBuffer = ibuf.get();
binds.push_back(std::move(ibuf)); binds.push_back(std::move(ibuf));
} }
\ No newline at end of file
void Drawable::SetCamera(
Logger& logger,
DirectX::XMVECTOR eyePosition,
DirectX::XMVECTOR focusPosition,
DirectX::XMVECTOR upDirection) noexcept
{
using namespace DirectX;
this->eyePosition = eyePosition;
this->focusPosition = focusPosition;
this->upDirection = upDirection;
/*this->upDirection = XMVectorSet(0.0f, 1.0f, 0.0f, 1.0f);
this->focusPosition = XMVectorZero();
this->eyePosition = XMVectorSet(20.0f * sinValue, 10.0f, -20.0f * cosValue, 1.0f);
XMFLOAT4 upDirection4;
XMFLOAT4 eyePosition4;
XMFLOAT4 focusPosition4;
XMStoreFloat4(&upDirection4, this->upDirection);
XMStoreFloat4(&eyePosition4, this->eyePosition);
XMStoreFloat4(&focusPosition4, this->focusPosition);
logger.PutLog("Drawable::SetCamera", "upDirection: {" + std::to_string(upDirection4.x) + ", " + std::to_string(upDirection4.y) + ", " + std::to_string(upDirection4.z) + ", " + std::to_string(upDirection4.w) + "}");
logger.PutLog("Drawable::SetCamera", "eyePosition: {" + std::to_string(eyePosition4.x) + ", " + std::to_string(eyePosition4.y) + ", " + std::to_string(eyePosition4.z) + ", " + std::to_string(eyePosition4.w) + "}");
logger.PutLog("Drawable::SetCamera", "focusPosition: {" + std::to_string(focusPosition4.x) + ", " + std::to_string(focusPosition4.y) + ", " + std::to_string(focusPosition4.z) + ", " + std::to_string(focusPosition4.w) + "}");*/
};
\ No newline at end of file
...@@ -16,15 +16,10 @@ class Drawable ...@@ -16,15 +16,10 @@ class Drawable
public: public:
Drawable() = default; Drawable() = default;
Drawable(const Drawable&) = delete; Drawable(const Drawable&) = delete;
virtual DirectX::XMMATRIX GetTransformXM() const noexcept = 0; virtual DirectX::XMMATRIX GetTransformXM(Graphics& gfx) const noexcept = 0;
void Draw(Graphics& gfx, Logger& logger) const noexcept; void Draw(Graphics& gfx, Logger& logger) const noexcept;
virtual void Update(float dt) noexcept = 0; virtual void Update(float dt) noexcept = 0;
void SetCamera(
Logger& logger,
DirectX::XMVECTOR eyePosition,
DirectX::XMVECTOR focusPosition,
DirectX::XMVECTOR upDirection) noexcept;
void AddBind(std::unique_ptr<Bindable> bind) noexcept; void AddBind(std::unique_ptr<Bindable> bind) noexcept;
void AddIndexBuffer(std::unique_ptr<class IndexBuffer> ibuf) noexcept; void AddIndexBuffer(std::unique_ptr<class IndexBuffer> ibuf) noexcept;
void ExecuteBind(Graphics& gfx, Logger& logger) noexcept; void ExecuteBind(Graphics& gfx, Logger& logger) noexcept;
...@@ -33,9 +28,4 @@ private: ...@@ -33,9 +28,4 @@ private:
const IndexBuffer* pIndexBuffer = nullptr; const IndexBuffer* pIndexBuffer = nullptr;
std::vector<std::unique_ptr<Bindable>> binds; std::vector<std::unique_ptr<Bindable>> binds;
virtual const std::vector<std::unique_ptr<Bindable>>& GetStaticBinds() const noexcept = 0; virtual const std::vector<std::unique_ptr<Bindable>>& GetStaticBinds() const noexcept = 0;
protected:
// for camera
DirectX::XMVECTOR upDirection;
DirectX::XMVECTOR eyePosition;
DirectX::XMVECTOR focusPosition;
}; };
\ No newline at end of file
...@@ -184,4 +184,21 @@ wrl::ComPtr<IDXGISwapChain> Graphics::getSwapChain() ...@@ -184,4 +184,21 @@ wrl::ComPtr<IDXGISwapChain> Graphics::getSwapChain()
wrl::ComPtr<ID3D11DeviceContext> Graphics::getContext() wrl::ComPtr<ID3D11DeviceContext> Graphics::getContext()
{ {
return pContext; return pContext;
};
void Graphics::SetCamera(
Logger& logger,
DirectX::XMVECTOR eyePosition,
DirectX::XMVECTOR focusPosition,
DirectX::XMVECTOR upDirection) noexcept
{
using namespace DirectX;
this->eyePosition = eyePosition;
this->focusPosition = focusPosition;
this->upDirection = upDirection;
};
DirectX::XMMATRIX Graphics::getLookAtMatrix() noexcept
{
return DirectX::XMMatrixLookAtLH(this->eyePosition, this->focusPosition, this->upDirection);
}; };
\ No newline at end of file
#pragma once #pragma once
#include <d3d11.h> #include <d3d11.h>
#pragma comment (lib, "d3d11.lib")
#include <d3dcompiler.h>
#pragma comment (lib, "d3dcompiler.lib")
#include <wrl.h> #include <wrl.h>
#include <d3dcompiler.h> #include <d3dcompiler.h>
#include <DirectXMath.h> #include <DirectXMath.h>
#include "Logger.h"
namespace wrl = Microsoft::WRL; namespace wrl = Microsoft::WRL;
...@@ -28,6 +33,15 @@ public: ...@@ -28,6 +33,15 @@ public:
void SetProjection(DirectX::FXMMATRIX proj) noexcept; void SetProjection(DirectX::FXMMATRIX proj) noexcept;
DirectX::XMMATRIX GetProjection() const noexcept; DirectX::XMMATRIX GetProjection() const noexcept;
// for camera
void SetCamera(
Logger& logger,
DirectX::XMVECTOR eyePosition,
DirectX::XMVECTOR focusPosition,
DirectX::XMVECTOR upDirection) noexcept;
DirectX::XMMATRIX getLookAtMatrix() noexcept;
// for debug // for debug
wrl::ComPtr<ID3D11Device> getDevice(); wrl::ComPtr<ID3D11Device> getDevice();
wrl::ComPtr<IDXGISwapChain> getSwapChain(); wrl::ComPtr<IDXGISwapChain> getSwapChain();
...@@ -45,4 +59,8 @@ private: ...@@ -45,4 +59,8 @@ private:
wrl::ComPtr<ID3D11RenderTargetView> pTarget; wrl::ComPtr<ID3D11RenderTargetView> pTarget;
// 指向Depth Buffer View的指针 // 指向Depth Buffer View的指针
wrl::ComPtr<ID3D11DepthStencilView> pDSView; wrl::ComPtr<ID3D11DepthStencilView> pDSView;
// for camera
DirectX::XMVECTOR upDirection;
DirectX::XMVECTOR eyePosition;
DirectX::XMVECTOR focusPosition;
}; };
\ No newline at end of file
...@@ -88,107 +88,4 @@ Ground::Ground(Graphics & gfx, Logger & logger) noexcept ...@@ -88,107 +88,4 @@ Ground::Ground(Graphics & gfx, Logger & logger) noexcept
shapes.push_back(std::make_unique<Box>(gfx, vertices, logger)); shapes.push_back(std::make_unique<Box>(gfx, vertices, logger));
} }
// Init a 11 X 11 area as ground
//for (int i = -5; i < 6; i++)
//{
// for (int j = -5; j < 6; j++)
// {
// float boxPos[8][3] =
// {
// // left bottom back
// { -1.0f + i, -1.0f, -1.0f + j },
// // right bottom back
// { 1.0f + i, -1.0f, -1.0f + j },
// // left top back
// { -1.0f + i, 1.0f, -1.0f + j },
// // right top back
// { 1.0f + i, 1.0f, -1.0f + j },
// // left bottom front
// { -1.0f + i, -1.0f, 1.0f + j },
// // right bottom front
// { 1.0f + i, -1.0f, 1.0f + j },
// // left top front
// { -1.0f + i, 1.0f, 1.0f + j },
// // right top front
// { 1.0f + i, 1.0f, 1.0f + j },
// };
// float boxCol[6][3] =
// {
// { 0.0f, 1.0f, 0.0f }, // Green
// { 1.0f, 1.0f, 0.0f }, // Yellow
// { 1.0f, 0.0f, 0.0f }, // Red
// { 0.0f, 0.0f, 1.0f }, // Blue
// { 0.0f, 1.0f, 1.0f }, // Cyan
// { 1.0f, 0.0f, 1.0f }, // Magenta
// };
// shapes.push_back(std::make_unique<Box>(gfx, boxPos, boxCol, logger));
// }
//}
//float boxPos2[8][3] =
//{
// // left bottom back
// { -1.0f, -1.0f + 5.0f, -1.0f },
// // right bottom back
// { 1.0f, -1.0f + 5.0f, -1.0f },
// // left top back
// { -1.0f, 1.0f + 5.0f, -1.0f },
// // right top back
// { 1.0f, 1.0f + 5.0f, -1.0f },
// // left bottom front
// { -1.0f, -1.0f + 5.0f, 1.0f },
// // right bottom front
// { 1.0f, -1.0f + 5.0f, 1.0f },
// // left top front
// { -1.0f, 1.0f + 5.0f, 1.0f },
// // right top front
// { 1.0f, 1.0f + 5.0f, 1.0f },
//};
//float boxCol2[6][3] =
//{
// { 0.0f, 1.0f, 0.0f }, // Green
// { 1.0f, 1.0f, 0.0f }, // Yellow
// { 1.0f, 0.0f, 0.0f }, // Red
// { 0.0f, 0.0f, 1.0f }, // Blue
// { 0.0f, 1.0f, 1.0f }, // Cyan
// { 1.0f, 0.0f, 1.0f }, // Magenta
//};
//shapes.push_back(std::make_unique<Box>(gfx, boxPos2, boxCol2, logger));
//float boxPos3[8][3] =
//{
// // left bottom back
// { -1.0f, -1.0f - 5.0f, -1.0f },
// // right bottom back
// { 1.0f, -1.0f - 5.0f, -1.0f },
// // left top back
// { -1.0f, 1.0f - 5.0f, -1.0f },
// // right top back
// { 1.0f, 1.0f - 5.0f, -1.0f },
// // left bottom front
// { -1.0f, -1.0f - 5.0f, 1.0f },
// // right bottom front
// { 1.0f, -1.0f - 5.0f, 1.0f },
// // left top front
// { -1.0f, 1.0f - 5.0f, 1.0f },
// // right top front
// { 1.0f, 1.0f - 5.0f, 1.0f },
//};
//float boxCol3[6][3] =
//{
// { 0.0f, 1.0f, 0.0f }, // Green
// { 1.0f, 1.0f, 0.0f }, // Yellow
// { 1.0f, 0.0f, 0.0f }, // Red
// { 0.0f, 0.0f, 1.0f }, // Blue
// { 0.0f, 1.0f, 1.0f }, // Cyan
// { 1.0f, 0.0f, 1.0f }, // Magenta
//};
//shapes.push_back(std::make_unique<Box>(gfx, boxPos3, boxCol3, logger));
}; };
...@@ -130,6 +130,7 @@ ...@@ -130,6 +130,7 @@
<ClCompile Include="Bindable.cpp" /> <ClCompile Include="Bindable.cpp" />
<ClCompile Include="Box.cpp" /> <ClCompile Include="Box.cpp" />
<ClCompile Include="ConstantBuffer.h" /> <ClCompile Include="ConstantBuffer.h" />
<ClCompile Include="CoreHandler.cpp" />
<ClCompile Include="Drawable.cpp" /> <ClCompile Include="Drawable.cpp" />
<ClCompile Include="DrawableBase.cpp" /> <ClCompile Include="DrawableBase.cpp" />
<ClCompile Include="Graphics.cpp" /> <ClCompile Include="Graphics.cpp" />
...@@ -148,6 +149,7 @@ ...@@ -148,6 +149,7 @@
<ClCompile Include="Triangle.cpp" /> <ClCompile Include="Triangle.cpp" />
<ClCompile Include="VertexBuffer.cpp" /> <ClCompile Include="VertexBuffer.cpp" />
<ClCompile Include="VertexShader.cpp" /> <ClCompile Include="VertexShader.cpp" />
<ClCompile Include="Window.cpp" />
<ClCompile Include="WinMain.cpp" /> <ClCompile Include="WinMain.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
...@@ -183,6 +185,7 @@ ...@@ -183,6 +185,7 @@
<ItemGroup> <ItemGroup>
<ClInclude Include="Bindable.h" /> <ClInclude Include="Bindable.h" />
<ClInclude Include="Box.h" /> <ClInclude Include="Box.h" />
<ClInclude Include="CoreHandler.h" />
<ClInclude Include="Drawable.h" /> <ClInclude Include="Drawable.h" />
<ClInclude Include="DrawableBase.h" /> <ClInclude Include="DrawableBase.h" />
<ClInclude Include="Graphics.h" /> <ClInclude Include="Graphics.h" />
...@@ -202,6 +205,7 @@ ...@@ -202,6 +205,7 @@
<ClInclude Include="Triangle.h" /> <ClInclude Include="Triangle.h" />
<ClInclude Include="VertexBuffer.h" /> <ClInclude Include="VertexBuffer.h" />
<ClInclude Include="VertexShader.h" /> <ClInclude Include="VertexShader.h" />
<ClInclude Include="Window.h" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
......
...@@ -40,17 +40,17 @@ ...@@ -40,17 +40,17 @@
<Filter Include="Source Files\Scenes"> <Filter Include="Source Files\Scenes">
<UniqueIdentifier>{8f6ea4b7-1762-4def-8d85-fc7cf5d7d9ed}</UniqueIdentifier> <UniqueIdentifier>{8f6ea4b7-1762-4def-8d85-fc7cf5d7d9ed}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Header Files\Util">
<UniqueIdentifier>{6a06adba-c01d-4061-bc39-8e477199746c}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\Util">
<UniqueIdentifier>{65115cd4-ea49-4525-a0c8-6863874ba3f5}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="WinMain.cpp"> <ClCompile Include="WinMain.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Timer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Graphics.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ConstantBuffer.h"> <ClCompile Include="ConstantBuffer.h">
<Filter>Header Files\Bindables</Filter> <Filter>Header Files\Bindables</Filter>
</ClCompile> </ClCompile>
...@@ -84,9 +84,6 @@ ...@@ -84,9 +84,6 @@
<ClCompile Include="VertexShader.cpp"> <ClCompile Include="VertexShader.cpp">
<Filter>Source Files\Bindables</Filter> <Filter>Source Files\Bindables</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Logger.cpp">
<Filter>Source Files\Common</Filter>
</ClCompile>
<ClCompile Include="Box.cpp"> <ClCompile Include="Box.cpp">
<Filter>Source Files\Drawables</Filter> <Filter>Source Files\Drawables</Filter>
</ClCompile> </ClCompile>
...@@ -99,14 +96,29 @@ ...@@ -99,14 +96,29 @@
<ClCompile Include="DrawableBase.cpp"> <ClCompile Include="DrawableBase.cpp">
<Filter>Source Files\Drawables</Filter> <Filter>Source Files\Drawables</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Texture.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="Sampler.cpp"> <ClCompile Include="Sampler.cpp">
<Filter>Source Files</Filter> <Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="Window.cpp">
<Filter>Source Files\Common</Filter>
</ClCompile>
<ClCompile Include="Timer.cpp">
<Filter>Source Files\Util</Filter>
</ClCompile>
<ClCompile Include="Graphics.cpp">
<Filter>Source Files\Common</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Surface.cpp"> <ClCompile Include="Surface.cpp">
<Filter>Source Files</Filter> <Filter>Source Files\Common</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Texture.cpp"> <ClCompile Include="Logger.cpp">
<Filter>Source Files</Filter> <Filter>Source Files\Util</Filter>
</ClCompile>
<ClCompile Include="CoreHandler.cpp">
<Filter>Source Files\Common</Filter>
</ClCompile> </ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
...@@ -124,12 +136,6 @@ ...@@ -124,12 +136,6 @@
</FxCompile> </FxCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="Timer.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Graphics.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Bindable.h"> <ClInclude Include="Bindable.h">
<Filter>Header Files\Bindables</Filter> <Filter>Header Files\Bindables</Filter>
</ClInclude> </ClInclude>
...@@ -163,9 +169,6 @@ ...@@ -163,9 +169,6 @@
<ClInclude Include="TransformCBuf.h"> <ClInclude Include="TransformCBuf.h">
<Filter>Header Files\Bindables</Filter> <Filter>Header Files\Bindables</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Logger.h">
<Filter>Header Files\Common</Filter>
</ClInclude>
<ClInclude Include="Box.h"> <ClInclude Include="Box.h">
<Filter>Header Files\Drawables</Filter> <Filter>Header Files\Drawables</Filter>
</ClInclude> </ClInclude>
...@@ -179,13 +182,28 @@ ...@@ -179,13 +182,28 @@
<Filter>Header Files\Drawables</Filter> <Filter>Header Files\Drawables</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Sampler.h"> <ClInclude Include="Sampler.h">
<Filter>Header Files</Filter> <Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="Texture.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="Window.h">
<Filter>Header Files\Common</Filter>
</ClInclude>
<ClInclude Include="Timer.h">
<Filter>Header Files\Util</Filter>
</ClInclude>
<ClInclude Include="Graphics.h">
<Filter>Header Files\Common</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Surface.h"> <ClInclude Include="Surface.h">
<Filter>Header Files</Filter> <Filter>Header Files\Common</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Texture.h"> <ClInclude Include="Logger.h">
<Filter>Header Files</Filter> <Filter>Header Files\Util</Filter>
</ClInclude>
<ClInclude Include="CoreHandler.h">
<Filter>Header Files\Common</Filter>
</ClInclude> </ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -2,18 +2,6 @@ ...@@ -2,18 +2,6 @@
#include "Section.h" #include "Section.h"
#include "Drawable.h" #include "Drawable.h"
void Section::SetCamera(
Logger& logger,
DirectX::XMVECTOR upDirection,
DirectX::XMVECTOR eyePosition,
DirectX::XMVECTOR focusPosition) noexcept
{
for (auto& shape : shapes)
{
shape->SetCamera(logger, upDirection, eyePosition, focusPosition);
}
};
void Section::DrawShapes( void Section::DrawShapes(
Graphics& gfx, Graphics& gfx,
Logger& logger) noexcept Logger& logger) noexcept
......
...@@ -10,11 +10,7 @@ class Section ...@@ -10,11 +10,7 @@ class Section
public: public:
Section() = default; Section() = default;
Section(const Section&) = delete; Section(const Section&) = delete;
void SetCamera(
Logger& logger,
DirectX::XMVECTOR upDirection,
DirectX::XMVECTOR eyePosition,
DirectX::XMVECTOR focusPosition) noexcept;
void DrawShapes( void DrawShapes(
Graphics& gfx, Graphics& gfx,
Logger& logger) noexcept; Logger& logger) noexcept;
......
...@@ -10,7 +10,7 @@ void TransformCbuf::Bind(Graphics& gfx, Logger& logger) noexcept ...@@ -10,7 +10,7 @@ void TransformCbuf::Bind(Graphics& gfx, Logger& logger) noexcept
{ {
vcbuf.Update(gfx, vcbuf.Update(gfx,
DirectX::XMMatrixTranspose( DirectX::XMMatrixTranspose(
parent.GetTransformXM() * gfx.GetProjection() parent.GetTransformXM(gfx) * gfx.GetProjection()
) )
); );
vcbuf.Bind(gfx, logger); vcbuf.Bind(gfx, logger);
......
...@@ -137,7 +137,7 @@ void Triangle::Update(float dt) noexcept ...@@ -137,7 +137,7 @@ void Triangle::Update(float dt) noexcept
dz = dt; dz = dt;
} }
DirectX::XMMATRIX Triangle::GetTransformXM() const noexcept DirectX::XMMATRIX Triangle::GetTransformXM(Graphics& gfx) const noexcept
{ {
/*return DirectX::XMMatrixRotationRollPitchYaw(pitch, yaw, roll) * /*return DirectX::XMMatrixRotationRollPitchYaw(pitch, yaw, roll) *
DirectX::XMMatrixTranslation(r, 0.0f, 0.0f) * DirectX::XMMatrixTranslation(r, 0.0f, 0.0f) *
...@@ -145,5 +145,6 @@ DirectX::XMMATRIX Triangle::GetTransformXM() const noexcept ...@@ -145,5 +145,6 @@ DirectX::XMMATRIX Triangle::GetTransformXM() const noexcept
DirectX::XMMatrixTranslation(0.0f, 0.0f, 20.0f);*/ DirectX::XMMatrixTranslation(0.0f, 0.0f, 20.0f);*/
return return
DirectX::XMMatrixTranslation(0.0f, 0.0f, 4.0f) DirectX::XMMatrixTranslation(0.0f, 0.0f, 4.0f)
* DirectX::XMMatrixTranslation(dx, dy, dz); * DirectX::XMMatrixTranslation(dx, dy, dz)
* gfx.getLookAtMatrix();
} }
\ No newline at end of file
...@@ -9,7 +9,7 @@ class Triangle : public Drawable ...@@ -9,7 +9,7 @@ class Triangle : public Drawable
public: public:
Triangle(Graphics& gfx, StructVertex vertices[], Logger& logger); Triangle(Graphics& gfx, StructVertex vertices[], Logger& logger);
void Update(float dt) noexcept override; void Update(float dt) noexcept override;
DirectX::XMMATRIX GetTransformXM() const noexcept override; DirectX::XMMATRIX GetTransformXM(Graphics& gfx) const noexcept override;
private: private:
// positional // positional
//float position[3][3]; //float position[3][3];
......
This diff is collapsed.
#include "Window.h"
#include "Ground.h"
Window::Window(HWND& hWnd, HINSTANCE& hInstance, int nCmdShow, int x, int y, Logger& logger)
{
// this struct holds information for the window class
WNDCLASSEX wc;
// clear out the window class for use
ZeroMemory(&wc, sizeof(WNDCLASSEX));
// fill in the struct with the needed information
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = HandleMsgSetup;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.lpszClassName = "WindowClass";
// register the window class
RegisterClassEx(&wc);
// create rectangle for client area
RECT wr = { 0, 0, x, y }; // set the size only, but not the position
AdjustWindowRect(&wr, WS_OVERLAPPEDWINDOW, FALSE); // adjust the size
// create the window and use the result as the handle
hWnd = CreateWindowEx(
NULL,
"WindowClass", // name of the window class
"Oasis Demo", // title of the window
WS_OVERLAPPEDWINDOW, // window style
300, // x-position of the window
200, // y-position of the window
x, // width of the window
y, // height of the window
NULL, // we have no parent window, NULL
NULL, // we aren't using menus, NULL
hInstance, // application handle
NULL); // used with multiple windows, NULL
// display the window on the screen
ShowWindow(hWnd, nCmdShow);
// Init graphics
pGfx = std::make_unique<Graphics>(hWnd);
// Set projection
pGfx->SetProjection(DirectX::XMMatrixPerspectiveLH(1.0f, 3.0f / 4.0f, 0.5f, 40.0f));
// Init scenes
this->InitScene(logger);
}
LRESULT CALLBACK Window::HandleMsgSetup(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept
{
// use create parameter passed in from CreateWindow() to store window class pointer at WinAPI side
if (msg == WM_NCCREATE)
{
// extract ptr to window class from creation data
// 使用CREATESTRUCT函数的第一个参数lpCreateParams,通过reinterpret_cast,获取到CREATESTRUCT函数的指针
// lpCreateParams的指针和CREATESTRUCT的指针指向同一个物理地址,只是寻址对象不同
const CREATESTRUCTW* const pCreate = reinterpret_cast<CREATESTRUCTW*>(lParam);
// 取得指向Window的指针
Window* const pWnd = static_cast<Window*>(pCreate->lpCreateParams);
// 将Window类,存储到WinAPI
// set WinAPI-managed user data to store ptr to window class
SetWindowLongPtr(hWnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(pWnd));
// set message proc to normal (non-setup) handler now that setup is finished
SetWindowLongPtr(hWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(&Window::HandleMsgThunk));
// forward message to window class handler
return pWnd->HandleMsg(hWnd, msg, wParam, lParam);
}
}
LRESULT CALLBACK Window::HandleMsgThunk(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept
{
// retrieve ptr to window class
Window* const pWnd = reinterpret_cast<Window*>(GetWindowLongPtr(hWnd, GWLP_USERDATA));
// forward message to window class handler
return pWnd->HandleMsg(hWnd, msg, wParam, lParam);
}
LRESULT Window::HandleMsg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept
{
switch (msg)
{
// we don't want the DefProc to handle this message because
// we want our destructor to destroy the window, so return 0 instead of break
case WM_CLOSE:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
Graphics& Window::GetGfx()
{
return *pGfx;
}
void Window::InitScene(Logger &logger)
{
//Ground ground(*pGfx, logger);
pSections.push_back(make_unique<Ground>(*pGfx, logger));
}
void Window::DrawScenes(
Graphics& gfx,
Logger& logger) noexcept
{
for (auto& section : pSections)
{
section->DrawShapes(gfx, logger);
}
};
\ No newline at end of file
#pragma once
#include <Windows.h>
#include "Graphics.h"
#include <memory>
#include "Logger.h"
#include <vector>
#include "Section.h"
using namespace std;
class Window
{
public:
// 캯
Window(HWND& hWnd, HINSTANCE& hInstance, int nCmdShow, int x, int y, Logger& logger);
//~Window();
Window(const Window&) = delete;
Window& operator=(const Window&) = delete;
// Get Graphics member
Graphics& GetGfx();
// Put all scene initialization here
void InitScene(Logger& logger);
// Draw all scenes
void DrawScenes(Graphics& gfx, Logger& logger) noexcept;
private:
static LRESULT CALLBACK HandleMsgSetup(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept;
static LRESULT CALLBACK HandleMsgThunk(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept;
LRESULT HandleMsg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept;
private:
unique_ptr<Graphics> pGfx;
vector<unique_ptr<Section>> pSections;
};
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment