Skip to content

Commit 65cebed

Browse files
committed
New branch for bullet physics instead of newton (work in progress)
1 parent da5037f commit 65cebed

21 files changed

+391
-203
lines changed

premake4.lua

+9-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@ solution("qor")
2525
"ILU",
2626
"openal",
2727
"alut",
28-
"Newton",
28+
--"Newton",
29+
"BulletSoftBody",
30+
"BulletDynamics",
31+
"BulletCollision",
32+
"LinearMath",
2933
"ogg",
3034
"vorbis",
3135
"vorbisfile",
@@ -44,7 +48,10 @@ solution("qor")
4448
}
4549

4650
if (linux) then
47-
includedirs {"/usr/include/freetype2/**"}
51+
includedirs {
52+
"/usr/include/freetype2/",
53+
"/usr/local/include/bullet/"
54+
}
4855
end
4956

5057
includedirs {"third_party/include/"}

qor.make

+6-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ ifeq ($(config),debug)
2929
CFLAGS += $(CPPFLAGS) $(ARCH) -g -std=c++0x
3030
CXXFLAGS += $(CFLAGS)
3131
LDFLAGS += -Lthird_party/lib
32-
LIBS += -lGL -lGLU -lSDL -lSDLmain -lGLEW -lassimp -lIL -lILU -lopenal -lalut -lNewton -logg -lvorbis -lvorbisfile -lftgl -lboost_system -lboost_filesystem -llua5.1 -lluabind
32+
LIBS += -lGL -lGLU -lSDL -lSDLmain -lGLEW -lassimp -lIL -lILU -lopenal -lalut -lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath -logg -lvorbis -lvorbisfile -lftgl -lboost_system -lboost_filesystem -llua5.1 -lluabind
3333
RESFLAGS += $(DEFINES) $(INCLUDES)
3434
LDDEPS +=
3535
LINKCMD = $(CXX) -o $(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(ARCH) $(LIBS)
@@ -51,7 +51,7 @@ ifeq ($(config),release)
5151
CFLAGS += $(CPPFLAGS) $(ARCH) -O2 -std=c++0x
5252
CXXFLAGS += $(CFLAGS)
5353
LDFLAGS += -s -Lthird_party/lib
54-
LIBS += -lGL -lGLU -lSDL -lSDLmain -lGLEW -lassimp -lIL -lILU -lopenal -lalut -lNewton -logg -lvorbis -lvorbisfile -lftgl -lboost_system -lboost_filesystem -llua5.1 -lluabind
54+
LIBS += -lGL -lGLU -lSDL -lSDLmain -lGLEW -lassimp -lIL -lILU -lopenal -lalut -lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath -logg -lvorbis -lvorbisfile -lftgl -lboost_system -lboost_filesystem -llua5.1 -lluabind
5555
RESFLAGS += $(DEFINES) $(INCLUDES)
5656
LDDEPS +=
5757
LINKCMD = $(CXX) -o $(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(ARCH) $(LIBS)
@@ -81,6 +81,7 @@ OBJECTS := \
8181
$(OBJDIR)/Mesh.o \
8282
$(OBJDIR)/Main.o \
8383
$(OBJDIR)/Texture.o \
84+
$(OBJDIR)/Path.o \
8485
$(OBJDIR)/Console.o \
8586
$(OBJDIR)/Log.o \
8687
$(OBJDIR)/PropertyList.o \
@@ -217,6 +218,9 @@ $(OBJDIR)/Main.o: src/Main.cpp
217218
$(OBJDIR)/Texture.o: src/Texture.cpp
218219
@echo $(notdir $<)
219220
$(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
221+
$(OBJDIR)/Path.o: src/Path.cpp
222+
@echo $(notdir $<)
223+
$(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
220224
$(OBJDIR)/Console.o: src/Console.cpp
221225
@echo $(notdir $<)
222226
$(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"

qor.vcxproj

+5-2
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
<AdditionalIncludeDirectories>third_party\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
6767
</ResourceCompile>
6868
<Link>
69-
<AdditionalDependencies>GL.lib;GLU.lib;SDL.lib;SDLmain.lib;GLEW.lib;assimp.lib;IL.lib;ILU.lib;openal.lib;alut.lib;Newton.lib;ogg.lib;vorbis.lib;vorbisfile.lib;ftgl.lib;boost_system.lib;boost_filesystem.lib;lua5.1.lib;luabind.lib;%(AdditionalDependencies)</AdditionalDependencies>
69+
<AdditionalDependencies>GL.lib;GLU.lib;SDL.lib;SDLmain.lib;GLEW.lib;assimp.lib;IL.lib;ILU.lib;openal.lib;alut.lib;BulletSoftBody.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;ogg.lib;vorbis.lib;vorbisfile.lib;ftgl.lib;boost_system.lib;boost_filesystem.lib;lua5.1.lib;luabind.lib;%(AdditionalDependencies)</AdditionalDependencies>
7070
<OutputFile>$(OutDir)qor.exe</OutputFile>
7171
<AdditionalLibraryDirectories>third_party\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
7272
<SubSystem>Windows</SubSystem>
@@ -94,7 +94,7 @@
9494
<AdditionalIncludeDirectories>third_party\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
9595
</ResourceCompile>
9696
<Link>
97-
<AdditionalDependencies>GL.lib;GLU.lib;SDL.lib;SDLmain.lib;GLEW.lib;assimp.lib;IL.lib;ILU.lib;openal.lib;alut.lib;Newton.lib;ogg.lib;vorbis.lib;vorbisfile.lib;ftgl.lib;boost_system.lib;boost_filesystem.lib;lua5.1.lib;luabind.lib;%(AdditionalDependencies)</AdditionalDependencies>
97+
<AdditionalDependencies>GL.lib;GLU.lib;SDL.lib;SDLmain.lib;GLEW.lib;assimp.lib;IL.lib;ILU.lib;openal.lib;alut.lib;BulletSoftBody.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;ogg.lib;vorbis.lib;vorbisfile.lib;ftgl.lib;boost_system.lib;boost_filesystem.lib;lua5.1.lib;luabind.lib;%(AdditionalDependencies)</AdditionalDependencies>
9898
<OutputFile>$(OutDir)qor.exe</OutputFile>
9999
<AdditionalLibraryDirectories>third_party\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
100100
<SubSystem>Windows</SubSystem>
@@ -141,6 +141,7 @@
141141
<ClInclude Include="src\Engine.h" />
142142
<ClInclude Include="src\IPartitioner.h" />
143143
<ClInclude Include="src\Graphics.h" />
144+
<ClInclude Include="src\Path.h" />
144145
<ClInclude Include="src\IRenderable.h" />
145146
<ClInclude Include="src\DumbyPartitioner.h" />
146147
<ClInclude Include="src\IListenable.h" />
@@ -214,6 +215,8 @@
214215
</ClCompile>
215216
<ClCompile Include="src\Texture.cpp">
216217
</ClCompile>
218+
<ClCompile Include="src\Path.cpp">
219+
</ClCompile>
217220
<ClCompile Include="src\Console.cpp">
218221
</ClCompile>
219222
<ClCompile Include="src\Log.cpp">

src/Actor.cpp

-2
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,6 @@ void Actor::logicSelf(unsigned int a)
9292
m_fJumpForce = m_fJumpLength;
9393
}
9494

95-
96-
9795
//if(m_pInput->key(SDLK_a))
9896
// delta.setRel(0.0,
9997
// -m_fAccel,

src/Actor.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include "math/common.h"
1111

1212
// We can use EulerNode for this because the physics for our actor is only based on position :)
13-
class Actor : public EulerNode, public IPhysicsObject
13+
class Actor : public EulerNode
1414
{
1515
protected:
1616

src/Entity.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#include "IMeshContainer.h"
66
#include "ResourceMap.h"
77

8-
class Entity : public Node, public IMeshContainer, public IPhysicsObject
8+
class Entity : public Node, public IMeshContainer
99
{
1010
public:
1111

src/EnvironmentNode.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
// EnvironmentNode is a Node-style class that can contain static meshes
1111

12-
class EnvironmentNode : public Node, public IMeshContainer, public IPhysicsObject
12+
class EnvironmentNode : public Node, public IMeshContainer
1313
{
1414
public:
1515

src/GUI.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ class GUI : public IFallible
263263
}
264264
bool remove(Object* obj) {
265265
std::remove_if(m_Objects.begin(), m_Objects.end(),
266-
[obj](shared_ptr<Object> sp){
266+
[obj](shared_ptr<Object> sp) {
267267
return sp.get() == obj;
268268
}
269269
);

src/IPartitioner.h

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#ifndef _PARTITIONER_H
2+
#define _PARTITIONER_H
3+
4+
#include <list>
5+
#include "NodeAttributes.h"
6+
7+
class Node;
8+
class Light;
9+
10+
class IPartitioner
11+
{
12+
public:
13+
IPartitioner() {}
14+
virtual ~IPartitioner() {}
15+
16+
virtual std::list<Light*> getViewableLights(Node* root) = 0;
17+
virtual std::list<Node*> getViewableNodes(Node* root) = 0;
18+
virtual std::list<Node*> getLitObjects(Light* light, Node* root) = 0;
19+
virtual std::list<Node*> getLitObjects(Light* light, std::list<Node*>& node_list) = 0;
20+
private:
21+
};
22+
23+
#endif
24+

src/IPhysicsObject.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@ IPhysicsObject :: ~IPhysicsObject()
66
{
77
//shared_ptr<Physics> physics = m_wpPhysicsSystem.lock();
88

9+
//delete m_pMotionState;
910
if(m_pPhysics && m_pPhysicsBody)
10-
m_pPhysics->deleteBody(m_pPhysicsBody);
11+
m_pPhysics->deleteBody(static_cast<btRigidBody*>(m_pPhysicsBody));
12+
else
13+
delete m_pPhysicsBody;
1114
}
1215

1316
unsigned int IPhysicsObject :: physicsLogic(float timestep, float mass, glm::vec3& force, glm::vec3& omega, glm::vec3& torque, glm::vec3& velocity)

src/IPhysicsObject.h

+16-5
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ class Physics;
88
#include "math/common.h"
99
// Simple user data interface for physics for nodes
1010

11-
class IPhysicsObject
11+
class IPhysicsObject: public btMotionState
1212
{
1313
protected:
14-
void* m_pPhysicsBody;
14+
btCollisionObject* m_pPhysicsBody;
15+
//btMotionState* m_pMotionState;
1516
Physics* m_pPhysics;
1617

1718
public:
@@ -24,13 +25,19 @@ class IPhysicsObject
2425
};
2526

2627
IPhysicsObject():
27-
m_pPhysicsBody(NULL) {}
28+
m_pPhysicsBody(NULL),
29+
m_pPhysics(NULL) {}
2830
virtual ~IPhysicsObject();
2931

30-
void* getPhysicsBody() { return m_pPhysicsBody; }
31-
void setPhysicsBody(Physics* sys, void* p) {
32+
btMotionState* getMotionState() { return this; }
33+
btCollisionObject* getPhysicsBody() { return m_pPhysicsBody; }
34+
void setPhysicsBody(Physics* sys, btCollisionObject* p) {
35+
delete m_pPhysicsBody;
36+
//delete m_pMotionState;
37+
3238
m_pPhysics = sys;
3339
m_pPhysicsBody=p;
40+
//m_pMotionState=m;
3441
}
3542
virtual void sync(glm::mat4* m) {}
3643

@@ -41,6 +48,10 @@ class IPhysicsObject
4148
virtual Type getPhysicsType() { return NONE; }
4249
virtual unsigned int physicsLogic(float timestep, float mass, glm::vec3& force, glm::vec3& omega, glm::vec3& torque, glm::vec3& velocity);
4350
virtual float mass() { return 0.0f; }
51+
52+
virtual void setWorldTransform(const btTransform& worldTrans) {}
53+
virtual void getWorldTransform(btTransform& worldTrans) {}
54+
virtual void setKinematicPos(btTransform &currentPos) {}
4455
};
4556

4657
#endif

src/IRealtime.h

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#ifndef _IREALTIME_H
2+
#define _IREALTIME_H
3+
4+
#include "IFallible.h"
5+
6+
class IRealtime
7+
{
8+
public:
9+
virtual ~IRealtime() {}
10+
virtual bool logic(unsigned int t) {return false;}
11+
//virtual bool logic(unsigned int advance) {return logic(advance*0.001f);}
12+
//virtual bool logic(unsigned int advance) {return false;}
13+
};
14+
15+
#endif
16+

src/IRenderable.h

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#ifndef _IRENDERABLE_H
2+
#define _IRENDERABLE_H
3+
4+
class IRenderable{
5+
public:
6+
virtual ~IRenderable() {};
7+
virtual void render() const {}
8+
};
9+
10+
#endif

src/Node.h

+13-1
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,15 @@
2424

2525
#include "Util.h"
2626
#include "NodeAttributes.h"
27+
#include "Physics.h"
2728
#include "IPhysicsObject.h"
2829
#include "Frustum.h"
2930
#include "Graphics.h"
3031
#include "IPartitioner.h"
3132

3233
class Scene;
3334

34-
class Node : public std::enable_shared_from_this<Node>
35+
class Node : public IPhysicsObject, public std::enable_shared_from_this<Node>
3536
{
3637

3738
protected:
@@ -171,6 +172,17 @@ class Node : public std::enable_shared_from_this<Node>
171172
virtual const glm::mat4* matrix_c(Node::Space s) const;
172173
//virtual glm::mat4 matrix(Node::Space s = Node::S_PARENT) const;
173174

175+
// btMotionState overloads
176+
virtual void setWorldTransform(const btTransform& worldTrans) {
177+
// TODO: assumes world space
178+
worldTrans.getOpenGLMatrix((btScalar*)Matrix::ptr(*matrix()));
179+
pendWorldMatrix();
180+
}
181+
virtual void getWorldTransform(btTransform& worldTrans) const {
182+
worldTrans.setFromOpenGLMatrix(Matrix::ptr(*matrix_c()));
183+
}
184+
virtual void setKinematicPos(btTransform &currentPos) {}
185+
174186
virtual void pendWorldMatrix() const {
175187
m_PendingCache |= PC_WORLD_MATRIX;
176188
for(auto itr = m_Children.cbegin();

src/Path.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#include "Path.h"
2+
3+
Path :: Path()
4+
{
5+
}
6+
7+
Path :: ~Path()
8+
{
9+
}
10+

src/Path.h

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#ifndef _PATH_H
2+
#define _PATH_H
3+
4+
#include "Freq.h"
5+
6+
class Path
7+
{
8+
private:
9+
10+
public:
11+
Path();
12+
virtual ~Path();
13+
};
14+
15+
#endif
16+

0 commit comments

Comments
 (0)