]> git.leopard-lacewing.eu Git - cgue_weave.git/commitdiff
vereinfache Draw Befehl (verschiedene DRAW Typen/Target)
authorPeter Schaefer <schaeferpm@gmail.com>
Thu, 21 Apr 2016 09:27:17 +0000 (11:27 +0200)
committerPeter Schaefer <schaeferpm@gmail.com>
Thu, 21 Apr 2016 09:27:17 +0000 (11:27 +0200)
BugFix (F3&F6 Draw Wireframe)

removed drawWire(...) -> drawModel(mat,dr_Wire)
removed drawBBox(...) -> drawModel(mat,dr_BBox)

13 files changed:
Weave/Graphix/Model/IMetaMesh.cpp
Weave/Graphix/Model/IMetaMesh.h
Weave/Graphix/Model/Model.cpp
Weave/Graphix/Model/Model.h
Weave/Graphix/Model/Plane.cpp
Weave/Graphix/Model/SkyBox.cpp
Weave/Graphix/Model/SkyBox.h
Weave/Scene/EventBox.cpp
Weave/Scene/EventBox.h
Weave/Scene/Scene.cpp
Weave/Scene/Scene.h
Weave/Scene/SceneObject.cpp
Weave/Scene/SceneObject.h

index a907c49c42a3d368b1a1b39588a9657b7fd58162..6d6b8f3dce1d30caecde80fd75a6f302a200bb70 100644 (file)
@@ -146,21 +146,21 @@ void IMetaMesh::unbindShader(const Shader* _shader)
        }\r
 }\r
 \r
-void IMetaMesh::drawModel(const mat4& _modelMat) const\r
+void IMetaMesh::drawModel(const mat4& _modelMat, drawType _type, const vec4& _color) const\r
 {\r
        for (auto i = models.begin(); i != models.end(); ++i)\r
        {\r
-               i->first->drawModel(_modelMat* i->second);\r
+               i->first->drawModel(_modelMat* i->second, _type, _color*.9f);\r
        }\r
 }\r
 \r
-void IMetaMesh::drawWire(const mat4& _modelMat, const vec4& _color) const\r
-{\r
-       for (auto i = models.begin(); i != models.end(); ++i)\r
-       {\r
-               i->first->drawWire(_modelMat* i->second, _color*0.8f);\r
-       }\r
-}\r
+//void IMetaMesh::drawWire(const mat4& _modelMat, const vec4& _color) const\r
+//{\r
+//     for (auto i = models.begin(); i != models.end(); ++i)\r
+//     {\r
+//             i->first->drawWire(_modelMat* i->second, _color*0.8f);\r
+//     }\r
+//}\r
 \r
 void IMetaMesh::bt_init(bool _isConvex)\r
 {\r
@@ -190,26 +190,26 @@ void IMetaMesh::bt_init(bool _isConvex)
 }\r
 \r
 \r
-void IMetaMesh::drawBBox(const mat4& _modelMat, const vec4& _color) const\r
-{\r
-       //      Model::drawBBox(_modelMat, vec4(0.f,.3f,.9f,1.f));\r
-       if (models.size() == 1)\r
-       {\r
-               auto i = models.front();\r
-               i.first->drawBBox(_modelMat* i.second, _color);\r
-       }\r
-       else\r
-       {\r
-               Model::drawBBox(_modelMat, _color);\r
-               if (models.size() > 1)\r
-               {\r
-                       for (auto i = models.begin(); i != models.end(); ++i)\r
-                       {\r
-                               i->first->drawBBox(_modelMat* i->second, _color*0.8f);\r
-                       }\r
-               }\r
-       }\r
-}\r
+//void IMetaMesh::drawBBox(const mat4& _modelMat, const vec4& _color) const\r
+//{\r
+//     //      Model::drawBBox(_modelMat, vec4(0.f,.3f,.9f,1.f));\r
+//     if (models.size() == 1)\r
+//     {\r
+//             auto i = models.front();\r
+//             i.first->drawBBox(_modelMat* i.second, _color);\r
+//     }\r
+//     else\r
+//     {\r
+//             Model::drawBBox(_modelMat, _color);\r
+//             if (models.size() > 1)\r
+//             {\r
+//                     for (auto i = models.begin(); i != models.end(); ++i)\r
+//                     {\r
+//                             i->first->drawBBox(_modelMat* i->second, _color*0.8f);\r
+//                     }\r
+//             }\r
+//     }\r
+//}\r
 \r
 \r
 string IMetaMesh::type2str() const\r
index e8f14fbc1193e317842702bfa8079a03c0ae20ae..eff082a25ae38f344aa13731919b236f4425a58d 100644 (file)
@@ -22,10 +22,10 @@ public:
        void unbindModel() override;\r
        void unbindShader(const Shader* shader) override;\r
 \r
-       void drawModel(const mat4& modelMat) const override;\r
-       void drawWire(const mat4& modelMat, const vec4& _color = vec4(0.9f, 0.f, 0.f, 1.f)) const override;\r
+       virtual void drawModel(const mat4& modelMat, drawType type = dr_Model, const vec4& color = vec4(0.9f, 0.f, 0.f, 1.f)) const override;\r
+       //void drawWire(const mat4& modelMat, const vec4& _color = vec4(0.9f, 0.f, 0.f, 1.f)) const override;\r
 \r
-       void drawBBox(const mat4& modelMat, const vec4& color = vec4(0.9f, 0.f, 0.f, 1.f)) const override;\r
+       //void drawBBox(const mat4& modelMat, const vec4& color = vec4(0.9f, 0.f, 0.f, 1.f)) const override;\r
 \r
        virtual void bt_init(bool isConvex = true) override;\r
 \r
index ed8520138ea758d54abe26de37c48618d1bb48a3..dd07243be0cf81845fcc1a343161cccfe0d781c0 100644 (file)
@@ -129,50 +129,87 @@ void Model::drawWire() const
        glBindVertexArray(0);\r
 }\r
 \r
-void Model::drawModel(const mat4& _modelMat) const\r
+void Model::drawModel(const mat4& _modelMat, drawType _type, const vec4& _color) const\r
 {\r
        useModel(_modelMat);\r
 \r
-       if (Events::isKToggleActive(SDLK_F3))\r
+       switch (_type)\r
+       {\r
+       default:
+       case dr_Model:
+               drawModel();
+               break;\r
+\r
+       case dr_WireC:\r
+               Shader::getShader()->setUniformLocation("uFragmentColor", _color);\r
+       case dr_WireT:\r
                drawWire();\r
-       else\r
-               drawModel();\r
-}\r
+               break;\r
 \r
-void Model::drawWire(const mat4& _modelMat, const vec4& _color) const\r
-{\r
-       //Shader::gBasic()->useShader();\r
+       case dr_BBox:\r
+               //Shader::getShader(SH_BASIC)->useShader();\r
+               Shader::getShader()->setUniformLocation("uFragmentColor", _color);\r
 \r
-       useModel(_modelMat);\r
+               btVector3 minB, maxB;\r
+               btTransform trans;\r
+               trans.setIdentity();\r
+               bt_collision_shape->getAabb(trans, minB, maxB);\r
 \r
-       Shader::getShader()->setUniformLocation("uFragmentColor", _color);\r
+               vec3 min = vec3(minB.getX(), minB.getY(), minB.getZ());\r
+               vec3 max = vec3(maxB.getX(), maxB.getY(), maxB.getZ());\r
 \r
-       drawWire();\r
+               vec3 size = (max - min);\r
+               vec3 center = (max + min) * .5f;\r
+               getBBoxModel()->drawModel(_modelMat*translate(center)*glm::scale(size));\r
+               break;\r
+       }\r
 \r
+       \r
 }\r
 \r
-void Model::drawBBox(const mat4& _modelMat, const vec4& _color) const\r
-{\r
-       Graphix::getGlError();\r
-       Shader::getShader(SH_BASIC)->useShader();\r
-\r
-       Shader::getShader()->setUniformLocation("uFragmentColor", _color);\r
-\r
-       Graphix::getGlError();\r
-\r
-       btVector3 minB, maxB;\r
-       btTransform trans;\r
-       trans.setIdentity();\r
-       bt_collision_shape->getAabb(trans, minB, maxB);\r
+//void Model::drawModel(const mat4& _modelMat) const\r
+//{\r
+//     useModel(_modelMat);\r
+//\r
+//     drawModel();\r
+//}\r
 \r
-       vec3 min = vec3(minB.getX(), minB.getY(), minB.getZ());\r
-       vec3 max = vec3(maxB.getX(), maxB.getY(), maxB.getZ());\r
+//void Model::drawWire(const mat4& _modelMat) const\r
+//{\r
+//     useModel(_modelMat);\r
+//\r
+//     drawWire();\r
+//\r
+//}\r
+//\r
+//void Model::drawWire(const mat4& _modelMat, const vec4& _color) const\r
+//{\r
+//\r
+//     useModel(_modelMat);\r
+//\r
+//     Shader::getShader()->setUniformLocation("uFragmentColor", _color);\r
+//\r
+//     drawWire();\r
+//\r
+//}\r
 \r
-       vec3 size = (max - min);\r
-       vec3 center = (max + min) * .5f;\r
-       //Shader::gBasic()->useShader();\r
-       getBBoxModel()->drawModel(_modelMat*translate(center)*glm::scale(size)); //\r
-}\r
+//void Model::drawBBox(const mat4& _modelMat, const vec4& _color) const\r
+//{\r
+//     Shader::getShader(SH_BASIC)->useShader();\r
+//     Shader::getShader()->setUniformLocation("uFragmentColor", _color);\r
+//\r
+//     btVector3 minB, maxB;\r
+//     btTransform trans;\r
+//     trans.setIdentity();\r
+//     bt_collision_shape->getAabb(trans, minB, maxB);\r
+//\r
+//     vec3 min = vec3(minB.getX(), minB.getY(), minB.getZ());\r
+//     vec3 max = vec3(maxB.getX(), maxB.getY(), maxB.getZ());\r
+//\r
+//     vec3 size = (max - min);\r
+//     vec3 center = (max + min) * .5f;\r
+//     getBBoxModel()->drawModel(_modelMat*translate(center)*glm::scale(size));\r
+//}\r
 \r
 //void Model::getBBcs(vec3& _center, vec3& _size) const\r
 //{\r
index eb201f1dc3cf7c0be509b018ede03c92b49e9456..0bfac79fae3ccebaf557daaed1c2c494cd5fd25b 100644 (file)
@@ -11,6 +11,13 @@ struct aiMesh;
 \r
 typedef unsigned int uint;\r
 \r
+enum drawType {\r
+       dr_Model = 0,\r
+       dr_WireT = 1,\r
+       dr_WireC = 2,\r
+       dr_BBox = 3,\r
+};\r
+\r
 class Model\r
 {\r
 public:\r
@@ -24,11 +31,13 @@ public:
        virtual void unbindShader(const Shader* shader);\r
 \r
        /* Draws Model */\r
-       virtual void drawModel(const mat4& modelMat) const;\r
-       virtual void drawWire(const mat4& modelMat, const vec4& color = vec4(0.9f, 0.f, 0.f, 1.f)) const;\r
+       virtual void drawModel(const mat4& modelMat, drawType type = dr_Model, const vec4& color = vec4(0.9f, 0.f, 0.f, 1.f)) const;\r
+       //virtual void drawModel(const mat4& modelMat) const;\r
+       //virtual void drawWire(const mat4& modelMat, const vec4& color) const;\r
+       //virtual void drawWire(const mat4& modelMat) const;\r
 \r
        /* Draws a BoundingBox around the Model */\r
-       virtual void drawBBox(const mat4& modelMat, const vec4& color = vec4(0.9f, 0.f, 0.f, 1.f)) const;\r
+       //virtual void drawBBox(const mat4& modelMat, const vec4& color = vec4(0.9f, 0.f, 0.f, 1.f)) const;\r
 \r
        static Model* getBBoxModel();\r
        static Model* getPlaneModel();\r
index 7772e7966de55cfcf2b6f2bca820c0d3687b2e50..a09c17a93d8175e3a4102afcf9d58feab7c4935c 100644 (file)
@@ -29,7 +29,7 @@ Plane::~Plane()
 
 void Plane::drawModel() const
 {
-       useModel(mat4(1.f));
+       //useModel(mat4(1.f));
 
        Shader::getShader()->setUniformLocation("uPlain", 1);
        Shader::getShader()->setUniformLocation("uFar", 0);
index 4b777d0488575520bc5764bc1946b40ccf6b728f..e3b8406f6b27859e6efd5544afc0461a694a8970 100644 (file)
@@ -25,7 +25,7 @@ SkyBox::~SkyBox()
 {\r
 }\r
 \r
-void SkyBox::drawModel(const mat4& _modelMat) const\r
+void SkyBox::drawModel() const\r
 {\r
        //_shader->useShader();\r
        //GLint OldCullFaceMode;\r
@@ -36,8 +36,6 @@ void SkyBox::drawModel(const mat4& _modelMat) const
        glDepthFunc(GL_LEQUAL);\r
        //glDisable(GL_DEPTH_TEST);\r
 \r
-       useModel(_modelMat);\r
-\r
        Shader::getShader()->setUniformLocation("uPlain", 0);\r
        Shader::getShader()->setUniformLocation("uFar", 1);\r
 \r
index 2ce87da536aa74c31962af70d7d3437715669621..49e9e77af6c9fa7c8ea702ee6f11bf6e88511e1b 100644 (file)
@@ -10,7 +10,8 @@ public:
        SkyBox();\r
        ~SkyBox();\r
 \r
-       void drawModel(const mat4& modelMat) const override;\r
+protected:\r
+       virtual void drawModel() const override;\r
 \r
        //uncommend following lines to use default Loaders\r
        //void useModelMat(const mat4& model, Shader* shader) const override;\r
index 1db4abcc2dd5e3686a84086d10af6cd6799ba535..0ef1c8011e5267dc5bc11302cd43680a6deabe92 100644 (file)
@@ -48,10 +48,10 @@ void EventBox::update(float _deltaT)
 {
 }
 
-void EventBox::draw() const
+void EventBox::draw(drawTarget _target) const
 {
-if (Events::isKToggleActive(SDLK_F6))
-               collision->drawBBox(modelMat,vec4(.3f,.9f,.9f,1.f));
+if (_target == DRAW_Coll)
+               collision->drawModel(modelMat, dr_BBox, vec4(.3f,.9f,.9f,1.f));
 }
 
 void EventBox::collides(SceneObject* _other, btPersistentManifold* _contactManifold, float _deltaT)
index 68d0ead32bcd7300b869f461d30b1842bedf75a2..f1b4ab3dc1d25b9ea677b083715fd6c5bf8ac5b0 100644 (file)
@@ -16,8 +16,8 @@ public:
        EventBox(const mat4& modelMat, uint EB_TYPE=0);
        ~EventBox();
 
-       virtual void update(float);
-       virtual void draw() const;
+       virtual void update(float) override;
+       virtual void draw(drawTarget target = DRAW_Model) const override;
        virtual void collides(SceneObject* other, btPersistentManifold* contactManifold, float deltaT = 1.f) override;
 
 protected:
index 18801dd8b7b372184642e617a96f7f9af40b6f38..5ef3b96aa3f2fea699a08da8b07f90102993ee8f 100644 (file)
@@ -194,15 +194,35 @@ void Scene::update(float deltaT)
 
 void Scene::draw() const
 {
+       //Skybox
+       viewPort.bindView(Shader::getShader(SH_BASICTEXTURE), lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
+       //BBox
+       viewPort.bindView(Shader::getShader(SH_BASIC), lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
+       //SceneObjects
+       viewPort.bindView(Shader::getShader(SH_LIGHTING), lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
+       //ShadowDir
+       viewPort.bindViewShadowDir(Shader::getShader(SH_SHADOWDIR));
+
+       viewPort.useViewPort();
+
+       /*Draw WireFrame ONLY*/
+       if (Events::isKToggleActive(SDLK_F3))
+       {
+               Shader::getShader(SH_BASICTEXTURE)->useShader();
+               SkyBox.draw();
+               Shader::getShader(SH_LIGHTING)->useShader();
+               drawSceneObjects(DRAW_Wire);
+
+               return;
+       }
+
        //Directional Light Shadow
        shadowdir->useBuffer();
-       viewPort.bindViewShadowDir(Shader::getShader(SH_SHADOWDIR));
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
 
 
 
-
        /* DRAW SCENE */
        if (Graphix::testEffect(EF_BLOOM))
        {
@@ -210,15 +230,6 @@ void Scene::draw() const
                glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        }
 
-       viewPort.useViewPort();
-
-       //Skybox
-       viewPort.bindView(Shader::getShader(SH_BASICTEXTURE), lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
-       //BBox
-       viewPort.bindView(Shader::getShader(SH_BASIC), lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
-       //SceneObjects
-       viewPort.bindView(Shader::getShader(SH_LIGHTING), lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
-
        /*DRAW SCENE*/
        Shader::getShader(SH_BASICTEXTURE)->useShader();
        SkyBox.draw();
@@ -267,7 +278,7 @@ void Scene::draw() const
        if (Events::isKToggleActive(SDLK_F6))
        {
                Shader::getShader(SH_BASIC)->useShader();
-               drawSceneObjects(false);
+               drawSceneObjects(DRAW_Coll);
        }
        
 
@@ -286,17 +297,14 @@ void Scene::draw() const
 
 }
 
-void Scene::drawSceneObjects(bool _scOBJ) const
+void Scene::drawSceneObjects(drawTarget _target) const
 {
        /*TODO: Frustum Culling*/
        /*TODO: Z-Order (Back2Front)*/
 
        for (auto i = SceneObjects.cbegin(); i != SceneObjects.cend(); ++i)
        {
-               if(_scOBJ)
-                       (*i)->draw();
-               else
-                       (*i)->drawCollision();
+                       (*i)->draw(_target);
        }
 }
 
@@ -344,6 +352,7 @@ void Scene::setView(unsigned int x, unsigned int y, unsigned int width, unsigned
 
 void Scene::bindShader()
 {
+       /*SceneObject*/
        ShaderTarget shader[] = {SH_BASIC,SH_BASICTEXTURE,SH_LIGHTING };
        for (int s = 0; s < 3; s++)
        {
@@ -351,6 +360,11 @@ void Scene::bindShader()
                        (*i)->bindShader(Shader::getShader(shader[s]));
        }
 
+       /*Skybox*/
        SkyBox.bindShader(Shader::getShader(SH_BASICTEXTURE));
+
+       /*Collision Meshes*/
+       for (auto i = SceneObjects.cbegin(); i != SceneObjects.cend(); ++i)
+               (*i)->bindShaderCollision(Shader::getShader(SH_BASIC));
        
 }
\ No newline at end of file
index ff87cde9aae8fa5075c02d6b98d3460b9ca5454f..d873d18d33523c5828943189e7e1ceb8427ffcf8 100644 (file)
@@ -48,7 +48,7 @@ protected:
        std::list<SceneObject*> SceneObjects;
        std::set<const Shader *> ShaderSet;
 
-       void drawSceneObjects(bool scObj = true) const;
+       void drawSceneObjects(drawTarget target = DRAW_Model) const;
        
 
        float currenttime;
index de83ff2a2a76676ce3803e06c0c3b3f378d4b83c..fa685ebf1a378084fa176266cd81eeeba91a4fd3 100644 (file)
@@ -232,12 +232,26 @@ void SceneObject::setMargin(btScalar _margin)
        collision->bt_setMargin(_margin);
 }
 
-void SceneObject::draw() const
+void SceneObject::draw(drawTarget _target) const
 {
-       
+       switch (_target)
+       {
+       case DRAW_Model:
+       default:
+               texture->useTexture();
+               model->drawModel(modelMat,dr_Model);
+               break;
+       case DRAW_Wire:
+               texture->useTexture();
+               model->drawModel(modelMat, dr_WireT);
+               break;
+       case DRAW_Coll:
+               if (collision != nullptr)
+               collision->drawModel(modelMat, dr_WireC, vec4(0.9f, 0.f, 0.f, 1.f));
+               break;
+       }
        /* Draw Object*/
-       texture->useTexture();
-       model->drawModel(modelMat);
+       
 }
 
 void SceneObject::bindShader(const Shader* _shader)
@@ -246,17 +260,6 @@ void SceneObject::bindShader(const Shader* _shader)
 }
 
 
-void SceneObject::drawCollision() const
-{
-       if (collision != nullptr)
-       {
-       //      Shader::getShader(SH_BASIC)->useShader();
-       //      collision->bindShader(Shader::getShader(SH_BASIC));
-               collision->drawWire(modelMat);
-       }
-}
-
-
 void SceneObject::bindShaderCollision(const Shader* _shader)
 {
        collision->bindShader(_shader);
index 11b9dda9c505283b80871accf5cb351e051a2e06..db165282b72a4f82975484b9a59bae7e3affb267 100644 (file)
@@ -22,6 +22,12 @@ enum collisiontypes {
        COL_EVENT = BIT(4)
 };
 
+enum drawTarget {
+       DRAW_Model = 0,
+       DRAW_Wire = 1,
+       DRAW_Coll = 2
+};
+
 //class string;
 
 class SceneObject
@@ -35,11 +41,10 @@ public:
        virtual ~SceneObject();
 
        virtual void update(float);
-       virtual void draw() const;
+       virtual void draw(drawTarget target=DRAW_Model) const;
 
        virtual void bindShader(const Shader* shader);
 
-       virtual void drawCollision() const;
        virtual void bindShaderCollision(const Shader* shader);
 
        virtual void collides(SceneObject* other, btPersistentManifold* contactManifold, float deltaT=1.f);