#include "Graphix\Graphix.h"
-#include "Graphix\GLM.h"
+#include "GLM.h"
#include <iostream>
using std::cout;
--- /dev/null
+#include "GLM.h"
+
+float VektorAbs(const vec3& vek)
+{
+ return sqrt(vek.x*vek.x + vek.y*vek.y + vek.z*vek.z);
+}
+
+
+mat4 removeScale(const mat4& matrix)
+{
+ mat3 scalingM = transpose((mat3)matrix) * (mat3)matrix;
+
+ vec3 scalingV;
+ for (int i = 0; i < 3; ++i)
+ scalingV[i] = 1.f / sqrt(scalingM[i][i]);
+
+ return matrix * scale(scalingV);
+}
+
+vec3 getScale(const mat4& matrix)
+{
+ mat3 scalingM = transpose((mat3)matrix) * (mat3)matrix;
+
+ vec3 scalingV;
+ for (int i = 0; i < 3; ++i)
+ scalingV[i] = sqrt(scalingM[i][i]);
+
+ return scalingV;
+}
+
+vec3 orthoVec(const vec3& _direction, const vec3& _vec)
+{
+ return normalize(_vec + _direction * dot(_direction, _vec));
+}
\ No newline at end of file
--- /dev/null
+#pragma once
+
+#include "glm\glm.hpp"
+#include "glm\gtx\transform.hpp"
+#include "glm\gtc\type_ptr.hpp"
+#include "glm\gtx\rotate_vector.hpp"
+#include "glm\gtx\vector_angle.hpp"
+
+using glm::mat3;
+using glm::vec3;
+using glm::mat4;
+using glm::vec4;
+
+using glm::translate;
+using glm::rotate;
+//using glm::scale;
+using glm::determinant;
+using glm::perspective;
+using glm::normalize;
+using glm::inverse;
+using glm::transpose;
+using glm::dot;
+using glm::cross;
+
+using glm::angle;
+using glm::orientedAngle;
+
+using glm::value_ptr;
+
+using glm::sign;
+using glm::min;
+using glm::max;
+
+#define M_PI 3.14159265358979323846264338327950288 /* pi */
+#define M_PI_2 1.57079632679489661923132169163975144 /* pi/2 */
+#define M_PI_4 0.785398163397448309615660845819875721 /* pi/4 */
+#define M_1_PI 0.318309886183790671537767526745028724 /* 1/pi */
+#define M_2_PI 0.636619772367581343075535053490057448 /* 2/pi */
+#define M_D_R 57.2957795131 /* 180/pi */
+
+__declspec(deprecated)
+float VektorAbs(const vec3& vek);
+
+mat4 removeScale(const mat4& matrix);
+vec3 getScale(const mat4& matrix);
+
+vec3 orthoVec(const vec3& direction, const vec3& vec);
+
#include <string>
-#include "Graphix\GLM.h"
+#include "GLM.h"
#include <Windows.h>
#include <assimp/Importer.hpp>
+++ /dev/null
-#include "GLM.h"
-
-float VektorAbs(const vec3& vek)
-{
- return sqrt(vek.x*vek.x + vek.y*vek.y + vek.z*vek.z);
-}
-
-
-mat4 removeScale(const mat4& matrix)
-{
- mat3 scalingM = transpose((mat3)matrix) * (mat3)matrix;
-
- vec3 scalingV;
- for (int i = 0; i < 3; ++i)
- scalingV[i] = 1.f / sqrt(scalingM[i][i]);
-
- return matrix * scale(scalingV);
-}
-
-vec3 getScale(const mat4& matrix)
-{
- mat3 scalingM = transpose((mat3)matrix) * (mat3)matrix;
-
- vec3 scalingV;
- for (int i = 0; i < 3; ++i)
- scalingV[i] = sqrt(scalingM[i][i]);
-
- return scalingV;
-}
-
-vec3 orthoVec(const vec3& _direction, const vec3& _vec)
-{
- return normalize(_vec + _direction * dot(_direction, _vec));
-}
\ No newline at end of file
+++ /dev/null
-#pragma once
-
-#include "glm\glm.hpp"
-#include "glm\gtx\transform.hpp"
-#include "glm\gtc\type_ptr.hpp"
-#include "glm\gtx\rotate_vector.hpp"
-#include "glm\gtx\vector_angle.hpp"
-
-using glm::mat3;
-using glm::vec3;
-using glm::mat4;
-using glm::vec4;
-
-using glm::translate;
-using glm::rotate;
-//using glm::scale;
-using glm::determinant;
-using glm::perspective;
-using glm::normalize;
-using glm::inverse;
-using glm::transpose;
-using glm::dot;
-using glm::cross;
-
-using glm::angle;
-using glm::orientedAngle;
-
-using glm::value_ptr;
-
-using glm::sign;
-using glm::min;
-using glm::max;
-
-#define M_PI 3.14159265358979323846264338327950288 /* pi */
-#define M_PI_2 1.57079632679489661923132169163975144 /* pi/2 */
-#define M_PI_4 0.785398163397448309615660845819875721 /* pi/4 */
-#define M_1_PI 0.318309886183790671537767526745028724 /* 1/pi */
-#define M_2_PI 0.636619772367581343075535053490057448 /* 2/pi */
-#define M_D_R 57.2957795131 /* 180/pi */
-
-__declspec(deprecated)
-float VektorAbs(const vec3& vek);
-
-mat4 removeScale(const mat4& matrix);
-vec3 getScale(const mat4& matrix);
-
-vec3 orthoVec(const vec3& direction, const vec3& vec);
-
using std::string;
-
void Graphix::setWindowSize(unsigned int _width, unsigned int _height)
{
width = _width;
#pragma once
-#include <string>
#include <SDL2\SDL.h>
#include <GL\glew.h>
-//#include <unordered_map>
-//#include "Drawable.h"
-//#include "Scene.h"
+#include <string>
-using std::string;
-//using std::unordered_map;
class Shader;
static unsigned int xpos;
static unsigned int ypos;
- static string windowTitle;
+ static std::string windowTitle;
static Uint32 windowFlags;
static Uint32 sdlFlags;
#include "BBox.h"
+
#include "GL\glew.h"
+#include "../../GLM.h"
BBox::BBox()
#pragma once
+
#include "Model.h"
+
class BBox :
public Model
{
#include <assimp/scene.h>
#include <assimp/postprocess.h>
+#include "../../GLM.h"
+
#include "../Shader.h"
#include "../Texture.h"
#include "../../Message.h"
return firstBB;
//Inner Mesh
-
+ //call _model->checkColO2STriangle
+ //vec3 pos;
+ //mat3 direction;
+ //Overlap secondT,tmp;
+ //for (uint i = 0; i < numfaces; ++i)
+ //{
+ // pos = vec3(vertex[3 * index[3 * i]], vertex[3 * index[3 * i] + 1], vertex[3 * index[3 * i] + 2]);
+ // direction[1] = vec3(vertex[3 * index[3 * i + 1]], vertex[3 * index[3 * i + 1] + 1], vertex[3 * index[3 * i + 1] + 2]) - pos;
+ // direction[2] = vec3(vertex[3 * index[3 * i + 2]], vertex[3 * index[3 * i + 2] + 1], vertex[3 * index[3 * i + 2] + 2]) - pos;
+ // direction[0] = normalize(cross(direction[1], direction[2]));
+ // tmp = _model->checkColO2STriangle(_modelMat, pos, direction);
+ // if (tmp)
+ // secondT.update(tmp);
+ // }
+ //return secondT;
}
Overlap IMesh::checkColO2SBox(const mat4& _mMat, const vec3& _pos, const vec3& _size, const mat4& _modelMat) const
return firstBB;
//Inner Mesh
+ //call checkColO2STriangle
}
+Overlap IMesh::checkColO2STriangle(const mat4& _mMat, const vec3& _posB, const mat3& _directionsB) const
+{
+ Overlap firstBB = Model::checkColO2STriangle(_mMat, _posB, _directionsB);
+ //if (!firstBB)
+ return firstBB;
+
+ //Inner Mesh
+
+}
+
IMesh::operator string() const
{
return "IMesh";
#pragma once
#include <string>
-#include "../GLM.h"
+#include "../../GLM.h"
+#include "../../Overlap.h"
#include "Model.h"
Overlap checkColS2O(const mat4& mMat, const Model* model, const mat4& modelMat) const override;
Overlap checkColO2SBox(const mat4& mMat, const vec3& pos, const vec3& size, const mat4& modelMat) const override;
+ Overlap checkColO2STriangle(const mat4& mMat, const vec3& pos, const mat3& directions) const override;
operator std::string() const override;
#include <assimp/scene.h>
#include <assimp/postprocess.h>
+#include "../../GLM.h"
+
#include "IMesh.h"
#include "../Shader.h"
#include "../../Message.h"
#include <string>
#include <list>
-#include "../GLM.h"
+#include "../../GLM.h"
+#include "../../Overlap.h"
class IMesh;
class Shader;
return stepBB;
}
-Overlap Model::checkColO2SBox(const mat4& _mMat, const vec3& _posB, const vec3& _sizeB, const mat4& _modelMat) const
+Overlap Model::checkColO2SBox(const mat4& _mMat, const vec3& _posB, const vec3& _sizeB, const mat4& _modelMatB) const
{
vec3 scale = getScale(_mMat);
vec3 posA = BBposition;
mat4 mMat = removeScale(_mMat);
- mat4 modelAR = glm::inverse(_modelMat)*mMat;
- mat4 modelBR = glm::inverse(mMat)*_modelMat;
+ mat4 modelAR = glm::inverse(_modelMatB)*mMat;
+ mat4 modelBR = glm::inverse(mMat)*_modelMatB;
vec3 posAR = (vec3)(modelAR*vec4(posA, 1.f));
vec3 posBR = (vec3)(modelBR*vec4(_posB, 1.f));
return ret;
}
-void Model::checkCollideByAxis(float& _overlap, float& _inside, uint dim, const float* posA, const float* posB, const float* sizeA,const float* sizeB)
+Overlap Model::checkColO2STriangle(const mat4& _mMat, const vec3& _posB, const mat3& _directionsB) const
{
- _overlap = INFINITY;
- _inside = INFINITY;
+
+ vec3 posA = BBposition;
+ vec3 sizeA = BBsize;
+
+ vec3 scale = getScale(_mMat);
+ scaleVec3(posA, scale);
+ scaleVec3(sizeA, scale);
+
+ mat4 invmMat = glm::inverse(removeScale(_mMat));
+
+ vec3 posBR = (vec3)(invmMat*vec4(_posB, 1.f));
+ mat3 directionsBR = (mat3)invmMat*_directionsB;
+
+
+ //Triangle Face Distance
+ float nDist = (posA-posBR).length();
+ float nSize = directSize(sizeA,_directionsB[0]);
+ float overlap = nSize - nDist;
+ Overlap ret(overlap,overlap);
+ if (!ret)
+ return ret;
+
+
+ //Box to Triangle Distance
+ vec3 sizeBRP(0.f), sizeBRM(0.f);
+ for (int i = 0; i < 3; ++i)
+ {
+ sizeBRP[i] = max(-directionsBR[i][1],-directionsBR[i][2]);
+ sizeBRM[i] = max(directionsBR[i][1], directionsBR[i][2]);
+ if (sizeBRP[i] < 0)
+ sizeBRP[i] = 0;
+ if (sizeBRM[i] < 0)
+ sizeBRM[i] = 0;
+ }
+ overlap = sizeBRM[0] + sizeA[0] + sizeBRP[0];
+ for (int i = 0; i < 3; ++i)
+ {
+ if (posBR[i]>=0)
+ {
+ overlap = min(sizeBRP[i] + sizeA[i] - posBR[i],overlap);
+ }
+ else
+ {
+ overlap = min(sizeBRM[i] + sizeA[i] + posBR[i],overlap);
+ }
+ if (overlap < 0)
+ {
+ overlap = -1;
+ break;
+ }
+ }
+
+ return Overlap(overlap, overlap);
+
+}
+
+void Model::checkCollideByAxis(float& _overlap, float& _inside, uint dim, const float* posA, const float* posB, const float* sizeA, const float* sizeB)
+{
+ _overlap = sizeA[0] + sizeB[0];
+ _inside = sizeA[0] + sizeB[0];
for (uint i = 0; i < dim; ++i)
{
+
_overlap = min(sizeA[i] + sizeB[i] - abs(posA[i] - posB[i]), _overlap);
- if (_inside >= 0)
- _inside = min(abs(sizeA[i] - sizeB[i]) - abs(posA[i] - posB[i]), _inside);
+
if (_overlap < 0)
{
_overlap = -1;
_inside = -1;
return;
- }
+ }
+ if (_inside >= 0)
+ _inside = min(abs(sizeA[i] - sizeB[i]) - abs(posA[i] - posB[i]), _inside);
+
}
if (_inside < 0)
_inside = -1;
return Size;
}
+float Model::directSize(const vec3& _size, const vec3& _direction)
+{
+ float ret(0.f);
+ for (auto i = 0; i < 3; ++i)
+ {
+ ret += abs(_size[i]*_direction[i]);
+ }
+ return ret;
+}
+
void Model::scaleVec3(vec3& _vec, const vec3& _scale)
{
for (uint i = 0; i < 3; ++i)
delete ptr;
ptr = nullptr;
}
-
+
}
//vec3 posAR = (vec3)(modelAR*vec4(posA, 1.f));
//vec3 posBR = (vec3)(modelBR*vec4(posB, 1.f));
-
+
return 1;
}
Model* Model::SkyBoxModel = nullptr;
std::unordered_map<string, Model*> Model::IMetaModel;
std::unordered_map<string, uint> Model::IMetaModel_count;
-
-
-
-Overlap::Overlap() : unset(true)
-{
-}
-
-Overlap::Overlap(float _over, float _in) : in(_in), over(_over), unset(false)
-{
-}
-
-Overlap::~Overlap()
-{
-}
-
-float Overlap::overlap() const
-{
- if (unset)
- return -1;
- else
- return over;
-}
-
-float Overlap::inside() const
-{
- if (unset)
- return -1;
- else
- return in;
-}
-
-Overlap::operator bool() const
-{
- if (unset)
- return false;
- else
- return over>=0;
-}
-
-void Overlap::update(float _over, float _in)
-{
- if (unset)
- {
- over = _over;
- in = _in;
- unset = true;
- return;
- }
-
- // select closest distance
- if (over > _over)
- {
- over = _over;
- }
-
- //sync inside
- in = min(in, _in);
-}
-
-void Overlap::update(const Overlap& _other)
-{
- if (unset)
- {
- *this = _other;
- return;
- }
-
- // select closest distance
- if (over > _other.over)
- {
- over = _other.over;
- }
-
- //sync inside
- in = min(in, _other.in);
-}
-
-Overlap Overlap::merge(const Overlap& _first, const Overlap& _second)
-{
- // select closest distance
- Overlap ret = _first;
- ret.update(_second);
- return ret;
-}
\ No newline at end of file
#pragma once
-#include "../GLM.h"
+#include "../../GLM.h"
#include <unordered_map>
#include <string>
+#include "../../Overlap.h"
+
class Shader;
class Texture;
class Overlap;
/* test self against other*/
virtual Overlap checkColS2O(const mat4& mMat, const Model* model, const mat4& modelMat) const;
virtual Overlap checkColO2SBox(const mat4& mMat, const vec3& pos, const vec3& size, const mat4& modelMat) const;
- //virtual void checkColO2STriangle() const;
+ virtual Overlap checkColO2STriangle(const mat4& mMat, const vec3& pos, const mat3& directions) const;
static Model* getBBoxModel();
static Model* getSkyBoxModel();
static std::unordered_map<std::string, Model*> IMetaModel;
static std::unordered_map<std::string, uint> IMetaModel_count;
- static vec3 rotateSize(const vec3& size, const mat4& modelMat);
+
static void checkCollideByAxis(float& overlap, float& inside, uint dim, const float* posA, const float* posB, const float* sizeA, const float* sizeB);
static void scaleVec3(vec3& vec, const vec3& scale);
+ static vec3 rotateSize(const vec3& size, const mat4& modelMat);
+ static float directSize(const vec3& size, const vec3& direction);
private:
vec3 BBmin, BBmax;
vec3 BBsize, BBposition;
-};
-
-class Overlap
-{
-public:
- Overlap();
- Overlap(float over, float in);
- ~Overlap();
-
- float overlap() const;
- float inside() const;
-
- operator bool() const;
-
- static Overlap merge(const Overlap& first, const Overlap& second);
- void update(float over, float in);
- void update(const Overlap& other);
-
-protected:
- bool unset;
- float over;
- float in;
-
- vec3 center;
- vec3 normal;
};
\ No newline at end of file
#include "GL/glew.h"
#include "../Graphix.h"
+#include "../../GLM.h"
SkyBox::SkyBox()
#pragma once
#include "Model.h"
+#include "../../GLM.h"
class SkyBox :
public Model
#include <GL\glew.h>
#include "FreeImage.h"
#include <iostream>
-#include "GLM.h"
+#include "../GLM.h"
#include "../Message.h"
#include "Graphix.h"
#pragma once
-#include "GLM.h"
+#include "../GLM.h"
#include <string>
#include <unordered_map>
#include "ViewPort.h"
#include <GL\glew.h>
-#include "GLM.h"
+#include "../GLM.h"
#include "Shader.h"
#pragma once
//#include "Drawable.h"
-#include "GLM.h"
+#include "../GLM.h"
class Shader;
--- /dev/null
+
+#include "Overlap.h"
+
+Overlap::Overlap() : unset(true)
+{
+}
+
+Overlap::Overlap(float _over, float _in) : in(_in), over(_over), unset(false)
+{
+}
+
+Overlap::~Overlap()
+{
+}
+
+float Overlap::overlap() const
+{
+ if (unset)
+ return -1;
+ else
+ return over;
+}
+
+float Overlap::inside() const
+{
+ if (unset)
+ return -1;
+ else
+ return in;
+}
+
+Overlap::operator bool() const
+{
+ if (unset)
+ return false;
+ else
+ return over >= 0;
+}
+
+void Overlap::update(float _over, float _in)
+{
+ if (unset)
+ {
+ over = _over;
+ in = _in;
+ unset = true;
+ return;
+ }
+
+ // select closest distance
+ if (over > _over)
+ {
+ over = _over;
+ }
+
+ //sync inside
+ in = min(in, _in);
+}
+
+void Overlap::update(const Overlap& _other)
+{
+ if (unset)
+ {
+ *this = _other;
+ return;
+ }
+
+ // select closest distance
+ if (over > _other.over)
+ {
+ over = _other.over;
+ }
+
+ //sync inside
+ in = min(in, _other.in);
+}
+
+Overlap Overlap::merge(const Overlap& _first, const Overlap& _second)
+{
+ // select closest distance
+ Overlap ret = _first;
+ ret.update(_second);
+ return ret;
+}
\ No newline at end of file
--- /dev/null
+#pragma once
+
+#include "GLM.h"
+
+class Overlap
+{
+public:
+ Overlap();
+ Overlap(float over, float in);
+ ~Overlap();
+
+ float overlap() const;
+ float inside() const;
+
+ operator bool() const;
+
+ static Overlap merge(const Overlap& first, const Overlap& second);
+ void update(float over, float in);
+ void update(const Overlap& other);
+
+protected:
+ bool unset;
+ float over;
+ float in;
+
+ vec3 center;
+ vec3 normal;
+};
\ No newline at end of file
#include "../Message.h"
+#include "../GLM.h"
+
EventBox::EventBox(const mat4& _modelMat, uint _EB_TYPE) :
SceneObject(Graphix::shader_BBox, _modelMat, vec4(0.f), Model::getBBoxModel(), ""),
#pragma once
+
#include "SceneObject.h"
+#include "../GLM.h"
#define EB_WINZONE 1
#include "Marvin.h"
#include "../Graphix/Shader.h"
+#include "../GLM.h"
Marvin::Marvin(Shader* _shader, const mat4& _modelMat) : SceneObject(_shader, _modelMat, vec4(7.0f, 0.7f, 1.0f, 3.0f), "Player.dae", "model_player_2D.png")
#pragma once
#include "SceneObject.h"
-#include "../Graphix/GLM.h"
+#include "../GLM.h"
class Shader;
#include "Sky.h"
#include <GL\glew.h>
-#include "../Graphix/GLM.h"
+#include "../GLM.h"
#include "../Graphix/Graphix.h"
#include "../Graphix/Shader.h"
#include "../Message.h"
#include "../Events.h"
+#include "../Overlap.h"
+
#include <iostream>
using std::list;
#pragma once
-#include "../Graphix/GLM.h"
+#include "../GLM.h"
#include "../Graphix/ViewPort.h"
#include "Sky.h"
#include <gl/glew.h>
-#include "../Graphix/GLM.h"
+#include "../GLM.h"
+#include "../Overlap.h"
#include "../Graphix/Graphix.h"
#include "../Graphix/Shader.h"
#pragma once
-#include "../Graphix/GLM.h"
-
+#include "../GLM.h"
#include <string>
using std::string;
#include "../Graphix/Shader.h"
#include "../Graphix/Model.h"
+#include "../GLM.h"
+
Sky::Sky() : SceneObject(new Shader("skybox_VS.hlsl","skybox_color_FS.hlsl"), mat4(1.f), vec4(1.f), Model::getSkyBoxModel(), "")
{
#pragma once
#include "SceneObject.h"
-#include "../Graphix/GLM.h"
+#include "../GLM.h"
class Shader;
</Link>
</ItemDefinitionGroup>
<ItemGroup>
+ <ClCompile Include="BBoxTree.cpp" />
<ClCompile Include="Events.cpp" />
<ClCompile Include="Fps.cpp" />
<ClCompile Include="Game.cpp" />
- <ClCompile Include="Graphix\GLM.cpp" />
+ <ClCompile Include="GLM.cpp" />
<ClCompile Include="Graphix\Graphix.cpp" />
<ClCompile Include="Graphix\Model\BBox.cpp" />
<ClCompile Include="Graphix\Model\IMesh.cpp" />
<ClCompile Include="Graphix\Model\IMetaMesh.cpp" />
<ClCompile Include="Graphix\Model\Model.cpp" />
<ClCompile Include="Graphix\Model\SkyBox.cpp" />
+ <ClCompile Include="Overlap.cpp" />
<ClCompile Include="Scene\EventBox.cpp" />
<ClCompile Include="Scene\Marvin.cpp" />
<ClCompile Include="Scene\Scene.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Average.h" />
+ <ClInclude Include="BBoxTree.h" />
<ClInclude Include="Graphix\Model.h" />
<ClInclude Include="Events.h" />
<ClInclude Include="Fps.h" />
<ClInclude Include="Game.h" />
- <ClInclude Include="Graphix\GLM.h" />
+ <ClInclude Include="GLM.h" />
<ClInclude Include="Graphix\Graphix.h" />
<ClInclude Include="Graphix\Model\BBox.h" />
<ClInclude Include="Graphix\Model\IMesh.h" />
<ClInclude Include="Graphix\Model\IMetaMesh.h" />
<ClInclude Include="Graphix\Model\Model.h" />
<ClInclude Include="Graphix\Model\SkyBox.h" />
+ <ClInclude Include="Overlap.h" />
<ClInclude Include="Scene.h" />
<ClInclude Include="Scene\EventBox.h" />
<ClInclude Include="Scene\Marvin.h" />
<ClCompile Include="Events.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="Graphix\GLM.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="Graphix\Shader.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Graphix\Model\SkyBox.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Overlap.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="BBoxTree.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="GLM.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Fps.h">
<ClInclude Include="Events.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="Graphix\GLM.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="Graphix\Shader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Graphix\Model\SkyBox.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="Overlap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="BBoxTree.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="GLM.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
</Project>
\ No newline at end of file