diff --git a/Simulations/Demo_2022.vcxproj b/Simulations/Demo_2022.vcxproj index c00be70..29ed9f5 100644 --- a/Simulations/Demo_2022.vcxproj +++ b/Simulations/Demo_2022.vcxproj @@ -224,12 +224,14 @@ + + diff --git a/Simulations/Demo_2022.vcxproj.filters b/Simulations/Demo_2022.vcxproj.filters new file mode 100644 index 0000000..f0b4caa --- /dev/null +++ b/Simulations/Demo_2022.vcxproj.filters @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Simulations/MassPoint.h b/Simulations/MassPoint.h new file mode 100644 index 0000000..eefdc30 --- /dev/null +++ b/Simulations/MassPoint.h @@ -0,0 +1,8 @@ +#pragma once +#include "util/vectorbase.h" + +struct MassPoint { + GamePhysics::Vec3 position; + GamePhysics::Vec3 velocity; + bool isFixed; +}; diff --git a/Simulations/MassSpringSystemSimulator.cpp b/Simulations/MassSpringSystemSimulator.cpp new file mode 100644 index 0000000..93103fe --- /dev/null +++ b/Simulations/MassSpringSystemSimulator.cpp @@ -0,0 +1,127 @@ +#include "MassSpringSystemSimulator.h" + +MassSpringSystemSimulator::MassSpringSystemSimulator() +{ + //Test only + //auto first = addMassPoint(Vec3(0, 0, 1), Vec3(0, 0, 0), true); + //auto second = addMassPoint(Vec3(0, 0, 0), Vec3(0, 0, 0), true); + //addSpring(first, second, 2.0); +} + +const char* MassSpringSystemSimulator::getTestCasesStr() +{ + return nullptr; +} + +void MassSpringSystemSimulator::initUI(DrawingUtilitiesClass* DUC) +{ + this->DUC = DUC; +} + +void MassSpringSystemSimulator::reset() +{ +} + +void MassSpringSystemSimulator::drawFrame(ID3D11DeviceContext* pd3dImmediateContext) +{ + for (size_t i = 0; i < springs.size(); i++) { + auto sp = springs.at(i); + if (!sp.isValid()) + { + springs.erase(springs.begin() + i); + continue; + } + auto mp1 = sp.mp1.lock(); + auto mp2 = sp.mp2.lock(); + DUC->setUpLighting(Vec3(), 0.4 * Vec3(1, 1, 1), 100, 0.6 * Vec3(0.97, 0.86, 1)); + + DUC->drawSphere(mp1->position, Vec3(0.01)); + DUC->drawSphere(mp2->position, Vec3(0.01)); + + DUC->beginLine(); + DUC->drawLine(mp1->position, Vec3(1,0,0), mp2->position, Vec3(0,1,0)); + DUC->endLine(); + } +} + +void MassSpringSystemSimulator::notifyCaseChanged(int testCase) +{ +} + +void MassSpringSystemSimulator::externalForcesCalculations(float timeElapsed) +{ +} + +void MassSpringSystemSimulator::simulateTimestep(float timeStep) +{ +} + +void MassSpringSystemSimulator::onClick(int x, int y) +{ +} + +void MassSpringSystemSimulator::onMouse(int x, int y) +{ +} + +void MassSpringSystemSimulator::setMass(float mass) +{ +} + +void MassSpringSystemSimulator::setStiffness(float stiffness) +{ +} + +void MassSpringSystemSimulator::setDampingFactor(float damping) +{ +} + +int MassSpringSystemSimulator::addMassPoint(Vec3 position, Vec3 Velocity, bool isFixed) +{ + MassPoint masspoint; + masspoint.position = position; + masspoint.velocity = Velocity; + masspoint.isFixed = isFixed; + masspoints.push_back(std::make_shared(masspoint)); + + return masspoints.size() - 1; +} + +void MassSpringSystemSimulator::addSpring(int masspoint1, int masspoint2, float initialLength) +{ + auto mp1 = masspoints.at(masspoint1); + auto mp2 = masspoints.at(masspoint2); + + Spring spring; + spring.mp1 = mp1; + spring.mp2 = mp2; + spring.initialLength = initialLength; + + springs.push_back(spring); +} + +int MassSpringSystemSimulator::getNumberOfMassPoints() +{ + return masspoints.size(); +} + +int MassSpringSystemSimulator::getNumberOfSprings() +{ + return springs.size(); +} + +Vec3 MassSpringSystemSimulator::getPositionOfMassPoint(int index) +{ + auto mp = masspoints.at(index); + return mp->position; +} + +Vec3 MassSpringSystemSimulator::getVelocityOfMassPoint(int index) +{ + auto mp = masspoints.at(index); + return mp->velocity; +} + +void MassSpringSystemSimulator::applyExternalForce(Vec3 force) +{ +} diff --git a/Simulations/MassSpringSystemSimulator.h b/Simulations/MassSpringSystemSimulator.h index 82891b3..4e8642c 100644 --- a/Simulations/MassSpringSystemSimulator.h +++ b/Simulations/MassSpringSystemSimulator.h @@ -1,6 +1,8 @@ #ifndef MASSSPRINGSYSTEMSIMULATOR_h #define MASSSPRINGSYSTEMSIMULATOR_h #include "Simulator.h" +#include "MassPoint.h" +#include "Spring.h" // Do Not Change #define EULER 0 @@ -54,5 +56,9 @@ private: Point2D m_mouse; Point2D m_trackmouse; Point2D m_oldtrackmouse; + + //Mass points and springs + std::vector> masspoints; + std::vector springs; }; #endif \ No newline at end of file diff --git a/Simulations/Spring.cpp b/Simulations/Spring.cpp new file mode 100644 index 0000000..e69de29 diff --git a/Simulations/Spring.h b/Simulations/Spring.h new file mode 100644 index 0000000..27447f1 --- /dev/null +++ b/Simulations/Spring.h @@ -0,0 +1,11 @@ +#pragma once + +struct Spring +{ + std::weak_ptr mp1; + std::weak_ptr mp2; + float initialLength; + + bool isValid() { return !mp1.expired() && !mp2.expired(); } +}; + diff --git a/Simulations/main.cpp b/Simulations/main.cpp index 017be58..dc2d07a 100644 --- a/Simulations/main.cpp +++ b/Simulations/main.cpp @@ -20,8 +20,8 @@ using namespace GamePhysics; //#define ADAPTIVESTEP -#define TEMPLATE_DEMO -//#define MASS_SPRING_SYSTEM +//#define TEMPLATE_DEMO +#define MASS_SPRING_SYSTEM //#define RIGID_BODY_SYSTEM //#define SPH_SYSTEM diff --git a/SimulatorTester/SimulatorTester_2022.vcxproj b/SimulatorTester/SimulatorTester_2022.vcxproj index 050724a..140dc0a 100644 --- a/SimulatorTester/SimulatorTester_2022.vcxproj +++ b/SimulatorTester/SimulatorTester_2022.vcxproj @@ -172,9 +172,6 @@ {e0b52ae7-e160-4d32-bf3f-910b785e5a8e} - - {7329b02d-c504-482a-a156-181d48ce493c} - {85344b7f-5aa0-4e12-a065-d1333d11f6ca} diff --git a/Template_2022.sln b/Template_2022.sln index 592f272..6a43592 100644 --- a/Template_2022.sln +++ b/Template_2022.sln @@ -13,8 +13,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DXUT", "DXUT11\Core\DXUT_Di EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DXUTOpt", "DXUT11\Optional\DXUTOpt_DirectXTK_2022.vcxproj", "{61B333C2-C4F7-4CC1-A9BF-83F6D95588EB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MakeSpriteFont22", "DirectXTK\MakeSpriteFont\MakeSpriteFont22.csproj", "{7329B02D-C504-482A-A156-181D48CE493C}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AntTweakBar", "AntTweakBar\src\AntTweakBar_2022.vcxproj", "{B99E1FA1-C30A-45F2-9D57-9E9C21B2DF42}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectXTK_Desktop_2022", "DirectXTK\DirectXTK_Desktop_2022.vcxproj", "{E0B52AE7-E160-4D32-BF3F-910B785E5A8E}" @@ -29,6 +27,22 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Debug|Win32.ActiveCfg = Debug|Win32 + {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Debug|Win32.Build.0 = Debug|Win32 + {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Debug|x64.ActiveCfg = Debug|x64 + {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Debug|x64.Build.0 = Debug|x64 + {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Release|Win32.ActiveCfg = Release|Win32 + {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Release|Win32.Build.0 = Release|Win32 + {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Release|x64.ActiveCfg = Release|x64 + {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Release|x64.Build.0 = Release|x64 + {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Debug|Win32.ActiveCfg = Debug|Win32 + {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Debug|Win32.Build.0 = Debug|Win32 + {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Debug|x64.ActiveCfg = Debug|x64 + {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Debug|x64.Build.0 = Debug|x64 + {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Release|Win32.ActiveCfg = Release|Win32 + {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Release|Win32.Build.0 = Release|Win32 + {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Release|x64.ActiveCfg = Release|x64 + {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Release|x64.Build.0 = Release|x64 {DF460EAB-570D-4B50-9089-2E2FC801BF38}.Debug|Win32.ActiveCfg = Debug|Win32 {DF460EAB-570D-4B50-9089-2E2FC801BF38}.Debug|Win32.Build.0 = Debug|Win32 {DF460EAB-570D-4B50-9089-2E2FC801BF38}.Debug|x64.ActiveCfg = Debug|x64 @@ -61,22 +75,6 @@ Global {B99E1FA1-C30A-45F2-9D57-9E9C21B2DF42}.Release|Win32.Build.0 = Release|Win32 {B99E1FA1-C30A-45F2-9D57-9E9C21B2DF42}.Release|x64.ActiveCfg = Release|x64 {B99E1FA1-C30A-45F2-9D57-9E9C21B2DF42}.Release|x64.Build.0 = Release|x64 - {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Debug|Win32.ActiveCfg = Debug|Win32 - {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Debug|Win32.Build.0 = Debug|Win32 - {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Debug|x64.ActiveCfg = Debug|x64 - {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Debug|x64.Build.0 = Debug|x64 - {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Release|Win32.ActiveCfg = Release|Win32 - {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Release|Win32.Build.0 = Release|Win32 - {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Release|x64.ActiveCfg = Release|x64 - {3CABED2C-12F1-4408-AAAE-E2185A426F35}.Release|x64.Build.0 = Release|x64 - {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Debug|Win32.ActiveCfg = Debug|Win32 - {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Debug|Win32.Build.0 = Debug|Win32 - {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Debug|x64.ActiveCfg = Debug|x64 - {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Debug|x64.Build.0 = Debug|x64 - {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Release|Win32.ActiveCfg = Release|Win32 - {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Release|Win32.Build.0 = Release|Win32 - {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Release|x64.ActiveCfg = Release|x64 - {0B7BAA5B-0753-4015-A8F3-8FA540FC8660}.Release|x64.Build.0 = Release|x64 {E0B52AE7-E160-4D32-BF3F-910B785E5A8E}.Debug|Win32.ActiveCfg = Debug|Win32 {E0B52AE7-E160-4D32-BF3F-910B785E5A8E}.Debug|Win32.Build.0 = Debug|Win32 {E0B52AE7-E160-4D32-BF3F-910B785E5A8E}.Debug|x64.ActiveCfg = Debug|x64