\r
// load LVL\r
\r
- auto defaultShader = Shader::getShader(SH_LIGHTING);\r
-\r
- SceneObject* tmp_world = new Level(defaultShader, "level_1", "model_levelTest_2D.jpg");\r
+ SceneObject* tmp_world = new Level( "level_1", "model_levelTest_2D.jpg");\r
\r
//tmp_world->ignore = true;\r
current_world->addObject(tmp_world);\r
\r
-// current_world->addObject(new SceneObject(defaultShader, translate(vec3(-3.f, 1.f, 0.f)), vec4(1.0f, 1.0f, 1.0f, 3.0f), new BBox(), ""));\r
+// current_world->addObject(new SceneObject( translate(vec3(-3.f, 1.f, 0.f)), vec4(1.0f, 1.0f, 1.0f, 3.0f), new BBox(), ""));\r
\r
//Player\r
- SceneObject* tmp_playerObject = new Marvin(defaultShader, translate(vec3(1.f, 3.f, 1.f))*rotate((float)M_PI_4,vec3(0.f,1.f,0.f)));\r
+ SceneObject* tmp_playerObject = new Marvin(translate(vec3(1.f, 3.f, 1.f))*rotate((float)M_PI_4,vec3(0.f,1.f,0.f)));\r
\r
tmp_playerObject->yStatic= false;\r
\r
current_world->addObject(tmp_playerObject);\r
current_world->setLookAt(tmp_playerObject);\r
\r
- //current_world->addObject(new SceneObject(defaultShader, glm::mat4(1.0f), "Player.dae", "model_player.png"));\r
- //current_world->addObject(new SceneObject(defaultShader, translate(vec3(-3.f, .4f, 0.f))*scale(vec3(3.f)), "cow/cow.dae", "model_cow_2D.jpg"));\r
- current_world->addObject(new SceneObject(defaultShader, translate(vec3(-3.f, .4f, 0.f)), vec4(3.0f, 0.5f, 0.4f, 1.5f), "duck_col", "model_duck_2D.png"));\r
- current_world->addObject(new SceneObject(defaultShader, translate(vec3(-5.f, .4f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "duck", "model_duck_2D.png"));\r
- current_world->addObject(new SceneObject(defaultShader, translate(vec3(0.f, .4f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "lever", "model_duck_2D.png"));\r
+ //current_world->addObject(new SceneObject( glm::mat4(1.0f), "Player.dae", "model_player.png"));\r
+ //current_world->addObject(new SceneObject( translate(vec3(-3.f, .4f, 0.f))*scale(vec3(3.f)), "cow/cow.dae", "model_cow_2D.jpg"));\r
+ current_world->addObject(new SceneObject(translate(vec3(-3.f, .4f, 0.f)), vec4(3.0f, 0.5f, 0.4f, 1.5f), "duck_col", "model_duck_2D.png"));\r
+ current_world->addObject(new SceneObject(translate(vec3(-5.f, .4f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "duck", "model_duck_2D.png"));\r
+ current_world->addObject(new SceneObject(translate(vec3(0.f, .4f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "lever", "model_duck_2D.png"));\r
\r
- current_world->addObject(new SceneObject(defaultShader, translate(vec3(-5.f, 3.f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "SkyBox", "model_SkyBox_2D.png"));\r
+ current_world->addObject(new SceneObject(translate(vec3(-5.f, 3.f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "SkyBox", "model_SkyBox_2D.png"));\r
\r
//current_world->addObject(new EventBox(translate(vec3(3.f, .4f, 0.f)),EB_LOSTZONE));\r
current_world->addObject(new EventBox(translate(vec3(3.f, .4f, -15.f)), EB_WINZONE));\r
float message_time=0;\r
int framecount = 0;\r
\r
+\r
+ current_world->bindShader();\r
+\r
while (!Events::halt){\r
fps.step();\r
\r
EventBox::EventBox(const mat4& _modelMat, uint _EB_TYPE) :
- SceneObject(Shader::getShader(SH_BASIC), _modelMat, vec4(0.f), Model::getBBoxModel(), ""),
+ SceneObject( _modelMat, vec4(0.f), Model::getBBoxModel(), ""),
eb_type(_EB_TYPE)
{
collide_group = COL_EVENT;
#include "../GLM.h"
-Level::Level(const Shader* _shader, std::string _modelpath, std::string _texturepath) : SceneObject(_shader, mat4(1.f), vec4(1.f), Model::newIMetaModel(_modelpath+".dae"), _texturepath)
+Level::Level(std::string _modelpath, std::string _texturepath) : SceneObject(mat4(1.f), vec4(1.f), Model::newIMetaModel(_modelpath+".dae"), _texturepath)
{
collide_group = COL_LEVEL;
collide_with = COL_MARVIN | COL_ENEMY;
public SceneObject
{
public:
- Level(const Shader* shader,std::string modelpath, std::string texturepath);
+ Level(std::string modelpath, std::string texturepath);
~Level();
virtual void collides(SceneObject* other, btPersistentManifold* contactManifold, float deltaT=1.f) override;
#define SPEED_MOVE_NORMAL 1.5f
#define MOVE_FASTER 2.5f
-Marvin::Marvin(const Shader* _shader, const mat4& _modelMat) :
-SceneObject(_shader, _modelMat, vec4(7.0f, 0.7f, 1.0f, 3.0f), "Player", "model_player_2D.png")
+Marvin::Marvin( const mat4& _modelMat) :
+SceneObject( _modelMat, vec4(7.0f, 0.7f, 1.0f, 3.0f), "Player", "model_player_2D.png")
{
collide_group = COL_MARVIN;
collide_with = COL_LEVEL | COL_ENEMY | COL_EVENT;
public SceneObject
{
public:
- Marvin(const Shader* shader, const mat4& modelMat);
+ Marvin(const mat4& modelMat);
~Marvin();
virtual void update(float) override;
bt_dynamics_world->setGravity(btVector3(0, YFALL_SPEED, 0));
-
+ /*BUFFERS*/
render = new fBufferObject();
-
render->bindBuffer(Graphix::getWindowWidth(), Graphix::getWindowHeight());
-
blurPingPong = new fBufferObject*[2];
- blurPingPong[0] = new fBufferObject(1, false);
- blurPingPong[1] = new fBufferObject(1, false);
-
- blurPingPong[0]->bindBuffer(Graphix::getWindowWidth(), Graphix::getWindowHeight());
- blurPingPong[1]->bindBuffer(Graphix::getWindowWidth(), Graphix::getWindowHeight());
+ for (int i = 0; i < 2; i++)
+ {
+ blurPingPong[i] = new fBufferObject(1, false);
+ blurPingPong[i]->bindBuffer(Graphix::getWindowWidth(), Graphix::getWindowHeight());
+ }
shadowdir = new fBufferObject();
-
shadowdir->bindBuffer(Graphix::getWindowWidth(), Graphix::getWindowHeight());
-
postRender = new fBufferObject(2, false);
-
postRender->bindBuffer(Graphix::getWindowWidth(), Graphix::getWindowHeight());
render->clearBuffer();
+
}
//fBO
delete render;
- delete blurPingPong[0];
- delete blurPingPong[1];
+ for (int i = 0; i < 2; i++)
+ delete blurPingPong[i];
delete blurPingPong;
delete shadowdir;
-
/* DRAW SCENE */
if (Graphix::testEffect(EF_BLOOM))
{
render->useBuffer();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
+
viewPort.useViewPort();
//Skybox
- viewPort.bindView(SkyBox.gShader(), lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
+ 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));
- for (auto i = ShaderSet.cbegin(); i != ShaderSet.cend(); ++i)
- {
- viewPort.bindView(*i, lookat->getPosition() + vec3(0.0f, 1.0f, 0.0f));
- //bind Lighting
- }
-
+ /*DRAW SCENE*/
+ Shader::getShader(SH_BASICTEXTURE)->useShader();
SkyBox.draw();
- for (auto i = SceneObjects.cbegin(); i != SceneObjects.cend(); ++i)
- {
- (*i)->draw();
- }
-
+ Shader::getShader(SH_LIGHTING)->useShader();
+ drawSceneObjects();
+ GLboolean horizontal = true, firstit = true;
if (Graphix::testEffect(EF_BLOOM))
{
/* DRAW BRIGHTNESS */
postRender->useBuffer();
//glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ glClear(GL_COLOR_BUFFER_BIT);
Shader::getShader(SH_BASICTEXTURE)->useShader();
Shader::getShader(SH_BASICTEXTURE)->setUniformLocation("uBrightness", 1);
render->getTexture()->useTexture();
/* BLUR BRIGHTNESS */
Shader::getShader(SH_BLUR)->useShader();
- GLboolean horizontal = true, firstit = true;
+
for (int i = 0; i < 10; i++)
{
if (firstit)
firstit = false;
}
+ }
+
+ /*DRAW BBOX WIRES*/
+ if (Graphix::testEffect(EF_BLOOM))
+ render->useBuffer();
+ if (Events::isKToggleActive(SDLK_F6))
+ {
+ Shader::getShader(SH_BASIC)->useShader();
+ drawSceneObjects(false);
+ }
+
+ if (Graphix::testEffect(EF_BLOOM))
+ {
/* BLEND BRIGHTNESS TO ORIGINAL*/
Shader::getShader(SH_BLEND)->useShader();
render->clearBuffer();
}
+void Scene::drawSceneObjects(bool _scOBJ) const
+{
+ /*TODO: Frustum Culling*/
+ /*TODO: Z-Order (Back2Front)*/
+
+ for (auto i = SceneObjects.cbegin(); i != SceneObjects.cend(); ++i)
+ {
+ if(_scOBJ)
+ (*i)->draw();
+ else
+ (*i)->drawCollision();
+ }
+}
+
void Scene::addObject(SceneObject* _add)
{
SceneObjects.push_back(_add);
- ShaderSet.insert(_add->gShader());
bt_collision_world->addCollisionObject(*_add, _add->getCollideGroup(), _add->getCollideWith());
bt_dynamics_world->addCollisionObject(*_add,_add->getCollideGroup(),_add->getCollideWith());
viewPort.setView(x, y, width, height, updateProjection);
render->updateSize(width, height);
postRender->updateSize(width, height);
- blurPingPong[0]->updateSize(width, height);
- blurPingPong[1]->updateSize(width, height);
+ for (int i = 0; i < 2; i++)
+ blurPingPong[i]->updateSize(width, height);
+
+}
+
+void Scene::bindShader()
+{
+ ShaderTarget shader[] = {SH_BASIC,SH_BASICTEXTURE,SH_LIGHTING };
+ for (int s = 0; s < 3; s++)
+ {
+ for (auto i = SceneObjects.cbegin(); i != SceneObjects.cend(); ++i)
+ (*i)->bindShader(Shader::getShader(shader[s]));
+ }
+
+ SkyBox.bindShader(Shader::getShader(SH_BASICTEXTURE));
+
}
\ No newline at end of file
virtual ~Scene();
+ void bindShader();
+
virtual void update(float);
virtual void draw() const;
std::list<SceneObject*> SceneObjects;
std::set<const Shader *> ShaderSet;
+ void drawSceneObjects(bool scObj = true) const;
+
+
float currenttime;
std::stack<Timestamp> timestamps;
//std::stack<mat4> PlayerModels;
}
-SceneObject::SceneObject(const Shader* _shader, const mat4& _modelMat, const vec4& _material, string _modelpath, string texturepath) :
+SceneObject::SceneObject(const mat4& _modelMat, const vec4& _material, string _modelpath, string texturepath) :
model(nullptr),
collision(nullptr),
modelMat(_modelMat),
-shader(_shader),
mainScene(NULL),
collision_ignore(false),
texture(nullptr),
{
model = Model::newIMetaModel(_modelpath+".dae");
model->bindModel();
- model->bindShader(shader);
if (file_exist("../models/" + _modelpath + "_col.dae"))
{
//Message::info("SceneObject loaded.");
collision = Model::newIMetaModel(_modelpath + "_col.dae");
collision->bindModel();
- collision->bindShader(shader);
}
//Model::deleteIMetaModel(_modelpath);
// bt_rigid_body
}
-SceneObject::SceneObject(const Shader* _shader, const mat4& _modelMat, const vec4& _material, Model* _model, string texturepath) :
+SceneObject::SceneObject(const mat4& _modelMat, const vec4& _material, Model* _model, string texturepath) :
model(_model),
collision(nullptr),
modelMat(_modelMat),
-shader(_shader),
mainScene(NULL),
collision_ignore(false),
texture(nullptr),
collision = Model::getBBoxModel();
model->bindModel();
- model->bindShader(shader);
+
//Message::info("Binding Shader");
//Graphix::getGlError();
//Message::info("Done");
{
/* Draw Object*/
- shader->useShader();
texture->useTexture();
model->drawModel(modelMat);
+}
+
+void SceneObject::bindShader(const Shader* _shader)
+{
+ model->bindShader(_shader);
+}
- if (Events::isKToggleActive(SDLK_F6) && collision != nullptr)
+
+void SceneObject::drawCollision() const
+{
+ if (collision != nullptr)
{
- Shader::getShader(SH_BASIC)->useShader();
- collision->bindShader(Shader::getShader(SH_BASIC));
+ // Shader::getShader(SH_BASIC)->useShader();
+ // collision->bindShader(Shader::getShader(SH_BASIC));
collision->drawWire(modelMat);
- //collision->drawWire(modelMat);
}
}
+
+void SceneObject::bindShaderCollision(const Shader* _shader)
+{
+ collision->bindShader(_shader);
+}
+
+
void SceneObject::collides(SceneObject* _other, btPersistentManifold* _contactManifold, float _deltaT)
{
int numContacts = _contactManifold->getNumContacts();
}
-const Shader * SceneObject::gShader() const
-{
- return shader;
-}
+//const Shader * SceneObject::gShader() const
+//{
+// return shader;
+//}
const Texture * SceneObject::gTexture() const
{
public:
//SceneObject(Shader* _shader, mat4& model);
- SceneObject(const Shader* _shader, const mat4& modelMat, const vec4& material, string modelpath, string texturepath);
- SceneObject(const Shader* _shader, const mat4& modelMat, const vec4& material, Model* model, string texturepath);
+ SceneObject(const mat4& modelMat, const vec4& material, string modelpath, string texturepath);
+ SceneObject(const mat4& modelMat, const vec4& material, Model* model, string texturepath);
virtual ~SceneObject();
virtual void update(float);
virtual void draw() 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);
virtual vec3 getPosition() const;
void setCollision(bool);
- const Shader * gShader() const;
+ //const Shader * gShader() const;
const Texture * gTexture() const;
const Model * gModel() const;
mat4 modelMat;
- const Shader * shader;
+ //const Shader * shader;
Texture* texture;
Model* model;
Model* collision;
-Sky::Sky() : SceneObject(Shader::getShader(SH_BASICTEXTURE), scale(vec3(20.f)), vec4(1.f), Model::getSkyBoxModel(), "model_skybox_2D.jpg")
+Sky::Sky() : SceneObject( scale(vec3(20.f)), vec4(1.f), Model::getSkyBoxModel(), "model_skybox_2D.jpg")
{
modelMat[3][3] = 0.f;
}