From: Peter Schaefer Date: Mon, 1 Jun 2015 10:48:09 +0000 (+0200) Subject: creation of Bullet objects in Scene,SceneObject,Model X-Git-Url: https://git.leopard-lacewing.eu/?a=commitdiff_plain;h=4f61f9a58e58553aca509650549f294a5325bdf2;p=cgue_weave.git creation of Bullet objects in Scene,SceneObject,Model --- diff --git a/Weave/Graphix/Model/Model.cpp b/Weave/Graphix/Model/Model.cpp index bee81ca..3252885 100644 --- a/Weave/Graphix/Model/Model.cpp +++ b/Weave/Graphix/Model/Model.cpp @@ -251,6 +251,10 @@ void Model::useModelMat(const mat4& _model, Shader* _shader) const glUniformMatrix4fv(tmp, 1, GL_FALSE, value_ptr(_model)); } +Model::operator btCollisionShape*() const +{ + return bt_collision_shape; +} Overlap Model::isColliding(const Model* _modelThis, const Model* _modelOther, const mat4& _modelMatThis, const mat4& _modelMatOther) { diff --git a/Weave/Graphix/Model/Model.h b/Weave/Graphix/Model/Model.h index 0d8db9a..9802bf5 100644 --- a/Weave/Graphix/Model/Model.h +++ b/Weave/Graphix/Model/Model.h @@ -6,6 +6,8 @@ #include "../../Overlap.h" +#include + class Shader; class Texture; class Overlap; @@ -59,6 +61,8 @@ public: virtual operator std::string() const = 0; + virtual operator btCollisionShape*() const; + class SplitMat { public: @@ -160,6 +164,9 @@ protected: static vec3 rotateSize(const vec3& size, const mat4& modelMat); static float directSize(const vec3& size, const vec3& direction); + //Bullet + btCollisionShape* bt_collision_shape; + private: // vec3 BBmin, BBmax; // vec3 BBsize, BBposition; diff --git a/Weave/Scene/Scene.cpp b/Weave/Scene/Scene.cpp index aa7dabb..f7d59ea 100644 --- a/Weave/Scene/Scene.cpp +++ b/Weave/Scene/Scene.cpp @@ -16,6 +16,8 @@ #include +#include + using std::list; using std::set; using std::stack; @@ -28,6 +30,10 @@ using std::stack; #define timestep 0.01f +#define SCENE_SIZE 500.0 +#define MAX_OBJECTS 16000 + + Scene::Scene(unsigned int x, unsigned int y, unsigned int width, unsigned int height, float fovy, float zNear, float zFar, vec3 pos, SceneObject* _lookat) : viewPort(x, y, width, height, fovy, zNear, zFar), @@ -35,6 +41,17 @@ lookat(_lookat), move_delta(0) { currenttime = 0; + + bt_collision_configuration = new btDefaultCollisionConfiguration(); + bt_dispatcher = new btCollisionDispatcher(bt_collision_configuration); + + btScalar sscene_size = (btScalar)SCENE_SIZE; + btVector3 worldAabbMin(-sscene_size, -sscene_size, -sscene_size); + btVector3 worldAabbMax(sscene_size, sscene_size, sscene_size); + + bt_broadphase = new bt32BitAxisSweep3(worldAabbMin, worldAabbMax, MAX_OBJECTS, 0, true); + + bt_collision_world = new btCollisionWorld(bt_dispatcher, bt_broadphase, bt_collision_configuration); } @@ -46,8 +63,12 @@ Scene::~Scene() delete (*i); } - - + //Bullet + delete bt_collision_world; + delete bt_broadphase; + delete bt_dispatcher; + delete bt_collision_configuration; + //if (viewPort != nullptr) // delete viewPort; diff --git a/Weave/Scene/Scene.h b/Weave/Scene/Scene.h index d84571c..7950188 100644 --- a/Weave/Scene/Scene.h +++ b/Weave/Scene/Scene.h @@ -7,6 +7,7 @@ #include #include +#include #include class SceneObject; @@ -45,4 +46,16 @@ protected: float currenttime; std::stack PlayerModels; //std::stack PlayerDirections; + + //class btDefaultCollisionConfiguration; + //class btCollisionDispatcher; + //class btDbvtBroadphase; + //class btSequentialImpulseConstraintSolver; + //class btDiscreteDynamicsWorld; + + //Bullet + btCollisionConfiguration* bt_collision_configuration; + btCollisionDispatcher* bt_dispatcher; + btBroadphaseInterface* bt_broadphase; + btCollisionWorld* bt_collision_world; }; diff --git a/Weave/Scene/SceneObject.cpp b/Weave/Scene/SceneObject.cpp index e842939..5cb5e97 100644 --- a/Weave/Scene/SceneObject.cpp +++ b/Weave/Scene/SceneObject.cpp @@ -21,6 +21,8 @@ using std::string; #define YFALL_SPEED 9.8f +#define BIT(x) 1<<(X) + SceneObject::SceneObject(Shader* _shader, const mat4& _modelMat, const vec4& _material, string _modelpath, string texturepath) : model(nullptr), modelMat(_modelMat), @@ -31,7 +33,8 @@ texture(nullptr), ySpeed(0), yStatic(true), ignore(false), -newModel(true) +newModel(true), +bt_collision_object(new btCollisionObject()) { //Message::info("Error from befor?"); //Graphix::getGlError(); @@ -55,6 +58,7 @@ newModel(true) //Graphix::getGlError(); //Message::info("Done"); + bt_collision_object->setCollisionShape(*model); } SceneObject::SceneObject(Shader* _shader, const mat4& _modelMat, const vec4& _material, Model* _model, string texturepath) : @@ -67,7 +71,8 @@ texture(nullptr), ySpeed(0), yStatic(true), ignore(false), -newModel(false) +newModel(false), +bt_collision_object(new btCollisionObject()) { //Message::info("Error from befor?"); //Graphix::getGlError(); @@ -84,7 +89,9 @@ newModel(false) //Message::info("Binding Shader"); //Graphix::getGlError(); //Message::info("Done"); - + + //TypeCast btCollisionShape + bt_collision_object->setCollisionShape(*model); } SceneObject::~SceneObject() @@ -93,6 +100,8 @@ SceneObject::~SceneObject() Texture::deleteTexture(*texture); if (newModel) Model::deleteIMetaModel(*model); + + delete bt_collision_object; } float SceneObject::getFloor() const diff --git a/Weave/Scene/SceneObject.h b/Weave/Scene/SceneObject.h index 7ee69a1..77db452 100644 --- a/Weave/Scene/SceneObject.h +++ b/Weave/Scene/SceneObject.h @@ -3,6 +3,8 @@ #include "../GLM.h" #include +#include + using std::string; class Scene; @@ -80,5 +82,8 @@ protected: bool collision_ignore; + //Bullet + btCollisionObject* bt_collision_object; + };