From ddfc4435ff024aa2b623aa93fb1aca647b3bb89d Mon Sep 17 00:00:00 2001 From: Peter Schaefer Date: Wed, 15 Jun 2016 11:52:32 +0200 Subject: [PATCH] save old Model&ProjView --- Weave/Graphix/Graphix.h | 5 +++-- Weave/Scene/Camera.cpp | 11 +++++++++++ Weave/Scene/Camera.h | 9 ++++++--- Weave/Scene/Scene.cpp | 4 ++-- Weave/Scene/SceneObject.cpp | 15 +++++++++++---- Weave/Scene/SceneObject.h | 9 ++++----- Weave/Scene/Timestamp.cpp | 2 +- Weave/Scene/Timestamp.h | 2 +- 8 files changed, 39 insertions(+), 18 deletions(-) diff --git a/Weave/Graphix/Graphix.h b/Weave/Graphix/Graphix.h index a004d98..5311c91 100644 --- a/Weave/Graphix/Graphix.h +++ b/Weave/Graphix/Graphix.h @@ -8,11 +8,12 @@ #define BIT(x) (1<<(x)) enum Effects { - EF_NOTHING = 0, + EF_NONE = 0, EF_MOTION_BLUR_ACC = BIT(1), EF_TRANSPARENCY = BIT(2), EF_BLOOM = BIT(3), - EF_FRUSTUM_CULLING = BIT(4) + EF_FRUSTUM_CULLING = BIT(4), + EF_MOTION_BLUR = BIT(5) }; class Graphix diff --git a/Weave/Scene/Camera.cpp b/Weave/Scene/Camera.cpp index e091d77..c297a02 100644 --- a/Weave/Scene/Camera.cpp +++ b/Weave/Scene/Camera.cpp @@ -50,6 +50,11 @@ void Camera::useProjection() const Shader::getShader(SH_ACTIVE)->setUniformLocation("uInvProjection", glm::inverse(projection)); } +void Camera::useOldInvProjView() const +{ + Shader::getShader(SH_ACTIVE)->setUniformLocation("uOldInvProjView", oldInvProjView); +} + void Camera::updateView(const vec3& _target) { @@ -118,6 +123,12 @@ void Camera::updateProjection(float _yFov, float _xyRatio, float _zNear, float _ projection = perspective(yFov * (float)M_D2R, xyRatio, zNear, zFar); } + +void Camera::saveInvProjView() +{ + oldInvProjView = glm::inverse(projection*lookAt(cCenter, cPosition, cUpVector)); +} + Camera::FC_stat Camera::frustum_sphere(vec3 _center, float _radius) const { FC_stat result = FC_INSIDE; diff --git a/Weave/Scene/Camera.h b/Weave/Scene/Camera.h index cb046b0..e29231d 100644 --- a/Weave/Scene/Camera.h +++ b/Weave/Scene/Camera.h @@ -10,13 +10,11 @@ public: Camera(float yFov, float xyRatio, float zNear, float zFar); ~Camera(); - - - /*use Camera (bind View&Projection at current Shader) if unchanged*/ void useCamera() const; void useView() const; void useProjection() const; + void useOldInvProjView() const; void updateView(const vec3& target); void updateView_pitch(float); @@ -25,6 +23,8 @@ public: void updateProjection(float xyRatio); void updateProjection(float yFov, float xyRatio, float zNear, float zFar); + void saveInvProjView(); + vec3 getDirection() { return cFront;} vec3 getRight() { return cRight; } @@ -52,6 +52,9 @@ protected: float pitch, yaw; float dist; + /*old Projektion * View -> invers */ + mat4 oldInvProjView = mat4(1.f); + /*Frustum*/ float tan_alphaY; float Icos_alphaX, Icos_alphaY; diff --git a/Weave/Scene/Scene.cpp b/Weave/Scene/Scene.cpp index 3221228..5f202c8 100644 --- a/Weave/Scene/Scene.cpp +++ b/Weave/Scene/Scene.cpp @@ -51,7 +51,7 @@ lookat(_lookat) currenttime = 0.0f; if (lookat != nullptr) - timestamps.push(Timestamp(0.0f, _lookat->getModelMat(), lookat->ySpeed)); + timestamps.push(Timestamp(0.0f, _lookat->gModelMat(), lookat->ySpeed)); bt_collision_configuration = new btDefaultCollisionConfiguration(); bt_dispatcher = new btCollisionDispatcher(bt_collision_configuration); @@ -156,7 +156,7 @@ void Scene::update(float deltaT) if (ceil((currenttime + deltaT) / timestep) > ceil(currenttime / timestep)) { - timestamps.push(Timestamp(currenttime, lookat->getModelMat(), lookat->ySpeed)); + timestamps.push(Timestamp(currenttime, lookat->gModelMat(), lookat->ySpeed)); } currenttime += deltaT; diff --git a/Weave/Scene/SceneObject.cpp b/Weave/Scene/SceneObject.cpp index f1684d2..b8d0ab5 100644 --- a/Weave/Scene/SceneObject.cpp +++ b/Weave/Scene/SceneObject.cpp @@ -256,6 +256,7 @@ void SceneObject::draw(drawTarget _target) const } + void SceneObject::bindShader(const Shader* _shader) { model->bindShader(_shader); @@ -300,13 +301,19 @@ const Model * SceneObject::gModel() const return model; } -vec3 SceneObject::getPosition() const +const mat4& SceneObject::gModelMat() const { - return vec3(modelMat[3]); + return modelMat; } -mat4 SceneObject::getModelMat(){ - return modelMat; +void SceneObject::saveModelMat() +{ + oldModelMat = modelMat; +} + +vec3 SceneObject::getPosition() const +{ + return vec3(modelMat[3]); } void SceneObject::setModel(mat4& _modelMat){ diff --git a/Weave/Scene/SceneObject.h b/Weave/Scene/SceneObject.h index 4ab3f50..2c59533 100644 --- a/Weave/Scene/SceneObject.h +++ b/Weave/Scene/SceneObject.h @@ -50,7 +50,6 @@ public: virtual vec3 getPosition() const; - virtual mat4 getModelMat(); __declspec(deprecated) virtual void setModel(mat4&); __declspec(deprecated) @@ -60,16 +59,16 @@ public: void setMargin(btScalar margin); - //virtual bool operator==(SceneObject); - __declspec(deprecated) void setMainScene(Scene *); void setCollision(bool); - //const Shader * gShader() const; const Texture * gTexture() const; const Model * gModel() const; + const mat4 & gModelMat() const; + + void saveModelMat(); __declspec(deprecated) void setEnemy(bool isenemy); @@ -94,7 +93,7 @@ public: protected: mat4 modelMat; - + mat4 oldModelMat; //const Shader * shader; Texture* texture; diff --git a/Weave/Scene/Timestamp.cpp b/Weave/Scene/Timestamp.cpp index 974861b..7e069d4 100644 --- a/Weave/Scene/Timestamp.cpp +++ b/Weave/Scene/Timestamp.cpp @@ -1,6 +1,6 @@ #include "Timestamp.h" -Timestamp::Timestamp(float _time, mat4& _Playermodel, float _ySpeed) : +Timestamp::Timestamp(float _time, const mat4& _Playermodel, float _ySpeed) : time(_time), Playermodel(_Playermodel), //CameraX(x), diff --git a/Weave/Scene/Timestamp.h b/Weave/Scene/Timestamp.h index 26753e7..048027b 100644 --- a/Weave/Scene/Timestamp.h +++ b/Weave/Scene/Timestamp.h @@ -5,7 +5,7 @@ class Timestamp { public: - Timestamp(float _time, mat4& _Playermodel, float ySpeed); + Timestamp(float _time, const mat4& _Playermodel, float ySpeed); virtual ~Timestamp(); -- 2.47.3