diff --git a/ParticleGenerator/ParticleGenerator.exe b/ParticleGenerator/ParticleGenerator.exe index 83625ba84b7897070af281d57e4f0e11a2fa5543..8f744a0542490da9a0303903197d2324630d4d13 100644 Binary files a/ParticleGenerator/ParticleGenerator.exe and b/ParticleGenerator/ParticleGenerator.exe differ diff --git a/ParticleGenerator/ParticleGenerator.pdb b/ParticleGenerator/ParticleGenerator.pdb index c46357bcd341adbee94080b213a6fb6b9e799d75..dc845560b41a18b567016b703219f5c127cefc63 100644 Binary files a/ParticleGenerator/ParticleGenerator.pdb and b/ParticleGenerator/ParticleGenerator.pdb differ diff --git a/ParticleGenerator/src/Interface/Generator/PhysicGeneratorInterface.cpp b/ParticleGenerator/src/Interface/Generator/PhysicGeneratorInterface.cpp index acae397611560393a79b314e88f8766d76a1e3fe..f7442ebe597a98e55e25b591b57284f4d32548d5 100644 --- a/ParticleGenerator/src/Interface/Generator/PhysicGeneratorInterface.cpp +++ b/ParticleGenerator/src/Interface/Generator/PhysicGeneratorInterface.cpp @@ -29,6 +29,7 @@ namespace pg { if(ImGui::CollapsingHeader("Generator Position")) { ImGui::DragFloat3("Generator Position (x, y, z)", &this->_generator->m_position[0], 0.1f); + ImGui::SliderFloat3("Generator Roation (x, y, z)", &this->_generator->m_rotation[0], -360.f, 360.f); ImGui::DragFloat("Position Variation", &this->_generator->m_positionVariation, 0.01f, 0.f, 0.f, "%.4f"); } diff --git a/ParticleGenerator/src/Particle/generator/ParticleGenerator.hpp b/ParticleGenerator/src/Particle/generator/ParticleGenerator.hpp index b9ff82aad4ade926fe42cbcd418ceaf29d5dde22..7536d755df7d706410c1b4f9518e8393548a272f 100644 --- a/ParticleGenerator/src/Particle/generator/ParticleGenerator.hpp +++ b/ParticleGenerator/src/Particle/generator/ParticleGenerator.hpp @@ -8,16 +8,19 @@ namespace pg { protected: float m_positionVariation; glm::vec3 m_position; + glm::vec3 m_rotation; public: - ParticleGenerator(const ct::Point& position = ct::Point(), float positionVariation = 0.0) - : m_position(position), m_positionVariation(positionVariation) {} + ParticleGenerator(const glm::vec3& position = glm::vec3(0.f), float positionVariation = 0.0) + : m_position(position), m_positionVariation(positionVariation), m_rotation(0.0) {} inline float getPositionVariation() const {return this->m_positionVariation;} inline glm::vec3 getPosition() const {return this->m_position;} + inline glm::vec3 getRotation() const {return this->m_rotation;} inline void setPositionVariation(float positionVariation) {this->m_positionVariation = positionVariation;} - inline void setPosition(const ct::Point& position) {this->m_position = position;} + inline void setPosition(const glm::vec3& position) {this->m_position = position;} + inline void setRotation(const glm::vec3& rotation) {this->m_rotation = rotation;} virtual std::vector<std::unique_ptr<Particle>> generate(size_t count, size_t birth = 0) const = 0; diff --git a/ParticleGenerator/src/Particle/generator/PhysicsParticleGenerator.cpp b/ParticleGenerator/src/Particle/generator/PhysicsParticleGenerator.cpp index 4092956dc8a160992c873976a84395e97b8e8cac..5841bb70abcbcce2d2b0efb183692d92b1cc9871 100644 --- a/ParticleGenerator/src/Particle/generator/PhysicsParticleGenerator.cpp +++ b/ParticleGenerator/src/Particle/generator/PhysicsParticleGenerator.cpp @@ -4,6 +4,9 @@ #include <iostream> +#define GLM_ENABLE_EXPERIMENTAL +#include <glm/gtx/rotate_vector.hpp> + namespace pg { PhysicsParticleGenerator::PhysicsParticleGenerator(const ct::Point& position, float positionVariation, const glm::dvec3& velocity) @@ -48,13 +51,27 @@ namespace pg glm::vec3 accelerationVariation = {ax(randomEngine), ay(randomEngine), az(randomEngine)}; glm::vec3 frictionVariation = {fx(randomEngine), fy(randomEngine), fz(randomEngine)}; - particle->setVelocity(this->m_velocity + velocityVariation); - particle->setAcceleration(this->m_acceleration + accelerationVariation); - particle->setFriction(this->m_friction + frictionVariation); + glm::vec3 realVelocity = this->m_velocity + velocityVariation; + glm::vec3 realAcceleration = this->m_acceleration + accelerationVariation; + glm::vec3 realFriction = this->m_friction + frictionVariation; - particles.push_back(std::unique_ptr<Particle>(particle)); + realVelocity = glm::rotateZ(realVelocity, glm::radians(this->m_rotation.z)); + realVelocity = glm::rotateY(realVelocity, glm::radians(this->m_rotation.y)); + realVelocity = glm::rotateX(realVelocity, glm::radians(this->m_rotation.x)); + realAcceleration = glm::rotateZ(realAcceleration, glm::radians(this->m_rotation.z)); + realAcceleration = glm::rotateY(realAcceleration, glm::radians(this->m_rotation.y)); + realAcceleration = glm::rotateX(realAcceleration, glm::radians(this->m_rotation.x)); + realFriction = glm::rotateZ(realFriction, glm::radians(this->m_rotation.z)); + realFriction = glm::rotateY(realFriction, glm::radians(this->m_rotation.y)); + realFriction = glm::rotateX(realFriction, glm::radians(this->m_rotation.x)); + + particle->setVelocity(realVelocity); + particle->setAcceleration(realAcceleration); + particle->setFriction(realFriction); + + particles.push_back(std::unique_ptr<Particle>(particle)); } return particles; diff --git a/ParticleGenerator/src/Scene/Scenes/Grid.cpp b/ParticleGenerator/src/Scene/Scenes/Grid.cpp index 6dba19dd27dead89ee8f1b75cfad4f639b3601fa..a5e2e637c80237cde46a3359fade3daf9367a4c4 100644 --- a/ParticleGenerator/src/Scene/Scenes/Grid.cpp +++ b/ParticleGenerator/src/Scene/Scenes/Grid.cpp @@ -23,7 +23,7 @@ namespace pg::scene if (!_shader.usable()) { Source vertexShaderSource("res/shaders/scene/Grid.vert", Source::Categorie::VERTEX); - Source fragmentShaderSource("/res/shaders/scene/Grid.frag", Source::Categorie::FRAGMENT); + Source fragmentShaderSource("res/shaders/scene/Grid.frag", Source::Categorie::FRAGMENT); _shader << vertexShaderSource; _shader << fragmentShaderSource; diff --git a/ParticleGenerator/src/Scene/Scenes/MagicalIndex.cpp b/ParticleGenerator/src/Scene/Scenes/MagicalIndex.cpp deleted file mode 100644 index ceab1cb6980cffa97afe5036ba1853ca39fe924e..0000000000000000000000000000000000000000 --- a/ParticleGenerator/src/Scene/Scenes/MagicalIndex.cpp +++ /dev/null @@ -1,89 +0,0 @@ -#include "MagicalIndex.hpp" - -#include "../../Mesh/Model.hpp" - -namespace pg::scene -{ - MagicalIndex::MagicalIndex() - : _skybox("res/shaders/system/Skybox.vert", "res/shaders/system/Skybox.frag") {} - - void MagicalIndex::initialize() - { - std::cout << "Mark_0" << std::endl; - if (!this->_book.isGenerated()) - { - Model meshBook("res/models/magicalIndex/book.obj"); - this->_book.generate(meshBook.getMeshGeometry().vertices, meshBook.getMeshGeometry().indices); - } - std::cout << "Mark_1" << std::endl; - - this->_bookMaterial.load("res/models/magicalIndex/book.png"); - error::OpenGLError::check(); - std::cout << "Mark_2" << std::endl; - - if (!this->_program.usable()) - { - Source vertexShaderSource("res/shaders/scene/Phong.vert", Source::Categorie::VERTEX); - Source fragmentShaderSource("res/shaders/scene/Phong.frag", Source::Categorie::FRAGMENT); - - this->_program << vertexShaderSource; - this->_program << fragmentShaderSource; - - this->_program.link(); - - vertexShaderSource.release(); - fragmentShaderSource.release(); - } - - error::OpenGLError::check(); - std::cout << "Mark_3" << std::endl; - - if (this->_skybox.material().isValid()) - { - this->_skybox.load( - { - "res/textures/skybox/sky/right.png", - "res/textures/skybox/sky/left.png", - "res/textures/skybox/sky/top.png", - "res/textures/skybox/sky/bottom.png", - "res/textures/skybox/sky/front.png", - "res/textures/skybox/sky/back.png", - }, - Texture::Format::AUTO, - false); - } - - error::OpenGLError::check(); - std::cout << "Mark_4" << std::endl; - } - - void MagicalIndex::update(double) - { - } - - void MagicalIndex::render(const Camera &camera, double current_time) - { - this->_skybox.material().bind(0); - this->_skybox.draw(camera); - - glEnable(GL_DEPTH_TEST); - this->_bookMaterial.bind(0); - - this->_program.use(); - this->_program.setUniform("uModel", glm::mat4(1.f)); - this->_program.setUniform("uView", camera.getViewMatrix()); - this->_program.setUniform("uProj", camera.getViewFrustum().getProjectionMatrix()); - - this->_program.setUniform("uSlot", 0); - this->_program.setUniform("uLightPosition", glm::vec3(0.f, 10.f, 0.f)); - this->_program.setUniform("uViewPosition", camera.getPosition()); - this->_program.setUniform("uColor", glm::vec3(1.f, 1.f, 1.f)); - - this->_book.draw(); - glDisable(GL_DEPTH_TEST); - } - - void MagicalIndex::destroy() - { - } -} \ No newline at end of file diff --git a/ParticleGenerator/src/Scene/Scenes/MagicalIndex.hpp b/ParticleGenerator/src/Scene/Scenes/MagicalIndex.hpp deleted file mode 100644 index 4b8a96d269ad94f328fbacb2efacea47f51afe59..0000000000000000000000000000000000000000 --- a/ParticleGenerator/src/Scene/Scenes/MagicalIndex.hpp +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -#include "Scene.hpp" - -#include "../../Renderer/Shader/Program.hpp" -#include "../../Renderer/Texture/Material.hpp" - -#include "../../Mesh/Mesh.hpp" -#include "../../Mesh/Skybox.hpp" -#include "../../Mesh/Billboard.hpp" - - -namespace pg::scene { - class MagicalIndex : public Scene { - private: - Mesh _book; - Material _bookMaterial; - SkyBox _skybox; - Program _program; - - public: - MagicalIndex(); - - virtual void initialize(); - virtual void update(double); - virtual void render(const Camera &, double); - virtual void destroy(); - - virtual inline std::string name() const {return "A Certain Magical Index Scene";}; - virtual inline Interface * interface() {return nullptr;}; - }; -} \ No newline at end of file diff --git a/ParticleGenerator/src/main.cpp b/ParticleGenerator/src/main.cpp index 348fd5856f4197ee2494a5ae771ec2d60cb6865e..9b1757ed2f18a18d4c4db6936a2ac32cfa37867f 100644 --- a/ParticleGenerator/src/main.cpp +++ b/ParticleGenerator/src/main.cpp @@ -8,7 +8,6 @@ #include "Scene/Scenes/Physic.hpp" #include "Scene/Scenes/Path.hpp" #include "Scene/Scenes/Mesh.hpp" -#include "Scene/Scenes/MagicalIndex.hpp" #include "Interface/GlobalInterface.hpp" @@ -82,15 +81,12 @@ int main(int argc, const char * argv[]) { pg::scene::Physic physicScene; pg::scene::Path pathScene(&bezier, ctrlPoints); pg::scene::Mesh meshScene(&bezier, ctrlPoints); - pg::scene::MagicalIndex magicalIndex; pg::Manager manager(window, &physicScene); - manager.add(physicScene); manager.add(pathScene); manager.add(meshScene); - manager.add(magicalIndex); pg::GlobalInterface interface(window, manager, "Particle Generator Settings");