diff --git a/grk/project/Bullet.h b/grk/project/Bullet.h new file mode 100644 index 0000000..ec40915 --- /dev/null +++ b/grk/project/Bullet.h @@ -0,0 +1,52 @@ +#include "glm.hpp" +#include "src/Shader_Loader.h" + +#pragma once +class Bullet +{ +private: + float speed; + float lifetime; + glm::vec3 directionNormalized; + glm::vec3 startPosition; + float birthTime; + float scale; + //GLuint program; + Core::RenderContext renderContext; + + float getAge(float time) { + return time - birthTime; + } + + Bullet(float speed, float lifetime, glm::vec3 directionNormalized, glm::vec3 startPosition, float birthTime, Core::RenderContext renderContext, float scale){ + this->speed = speed; + this->lifetime = lifetime; + this->directionNormalized = directionNormalized; + this->startPosition = startPosition; + this->birthTime = birthTime; + this->renderContext = renderContext; + this->scale = scale; + } + +public: + static Bullet* createSimpleBullet(glm::vec3 directionNormalized, glm::vec3 startPosition, float birthTime) { + static bool simpleRenderContextLoaded; + static Core::RenderContext simpleRenderContext; + if (!simpleRenderContextLoaded) { + simpleRenderContextLoaded = true; + Core::loadModelToContext("./models/sphere.obj", simpleRenderContext); + } + return new Bullet(10, 10, directionNormalized, startPosition, birthTime, simpleRenderContext, 0.01f); + } + + bool shouldBeDestroyed(float time, GLuint program) { + float age = getAge(time); + if (age > lifetime) { + return true; + } + glm::mat4 modelMatrix = glm::translate(glm::mat4(1.0f), startPosition) * glm::translate(directionNormalized * speed * age) * glm::scale(glm::vec3(scale)); + Core::drawObjectPBR(renderContext, modelMatrix, glm::vec3(1.f, 0.f, 0.f), 0.3, 0, program); + return false; + } +}; + diff --git a/grk/project/GameUtils.h b/grk/project/GameUtils.h index c237638..a1b7ebb 100644 --- a/grk/project/GameUtils.h +++ b/grk/project/GameUtils.h @@ -1,21 +1,27 @@ #include #include "Sun.h" +#include "Bullet.h" +#include "src/Shader_Loader.h" #pragma once class GameUtils { private: - // Private constructor to prevent external instantiation GameUtils() : aspectRatio(1.f) { this->suns = new std::list(); + this->shaderLoader = new Core::Shader_Loader(); } std::list* suns; + std::list bullets; float aspectRatio; public: + Core::Shader_Loader* shaderLoader; + Core::RenderContext sphereContext; + float getAspectRatio() { return aspectRatio; diff --git a/grk/project/Spaceship.h b/grk/project/Spaceship.h index ba09680..c5620d9 100644 --- a/grk/project/Spaceship.h +++ b/grk/project/Spaceship.h @@ -1,18 +1,26 @@ #include "glm.hpp" #include "ext.hpp" #include +#include +#include "Bullet.h" #pragma once + class Spaceship { private: + std::list bullets; + float lastShootTime = 0.f; + float shootInterval = 0.3f; + // Prywatny konstruktor, aby zapobiec zewnêtrznemu tworzeniu instancji - Spaceship() {} + Spaceship() { + + } // Prywatny destruktor, aby zapobiec przypadkowemu usuwaniu instancji ~Spaceship() {} - public: static Spaceship* getInstance() @@ -49,7 +57,11 @@ public: return glm::translate(spaceshipPos) * specshipCameraRotrationMatrix * glm::eulerAngleY(glm::pi()) * glm::scale(glm::vec3(0.03f)); } - void processInput(GLFWwindow* window, float deltaTime) { + void processInput(GLFWwindow* window, float deltaTime, float time) { + static bool mouseButtonCallbackSet = false; + if (!mouseButtonCallbackSet) { + + } glm::vec3 spaceshipSide = glm::normalize(glm::cross(spaceshipDir, glm::vec3(0.f, 1.f, 0.f))); glm::vec3 spaceshipUp = glm::vec3(0.f, 1.f, 0.f); float angleSpeed = 0.05f * deltaTime * 60; @@ -74,6 +86,8 @@ public: spaceshipDir = glm::vec3(glm::eulerAngleY(angleSpeed) * glm::vec4(spaceshipDir, 0)); if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS) spaceshipDir = glm::vec3(glm::eulerAngleY(-angleSpeed) * glm::vec4(spaceshipDir, 0)); + if (glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS) + requestShoot(time); cameraPos = spaceshipPos - 0.5 * spaceshipDir + glm::vec3(0, 1, 0) * 0.2f; cameraDir = spaceshipDir; @@ -97,4 +111,35 @@ public: return cameraMatrix; } + + void renderBullets(float time, GLuint program) { + for (auto it = bullets.begin(); it != bullets.end();) { + Bullet* bullet = *it; + + if (bullet->shouldBeDestroyed(time, program)) { + delete bullet; + it = bullets.erase(it); + } + else { + it++; + } + } + } + + void requestShoot(float time) { + if (canShoot(time)) { + shoot(time); + } + } + + bool canShoot(float time) { + return lastShootTime == 0 || time - lastShootTime > shootInterval; + } + + void shoot(float time) { + glm::vec3 perpendicularVector = 0.25f * glm::normalize(glm::cross(cameraDir, glm::vec3(0.0f, 1.0f, 0.0f))); + bullets.push_back(Bullet::createSimpleBullet(cameraDir, spaceshipPos - perpendicularVector, time)); + bullets.push_back(Bullet::createSimpleBullet(cameraDir, spaceshipPos + perpendicularVector, time)); + lastShootTime = time; + } }; \ No newline at end of file diff --git a/grk/project/grk-project.vcxproj b/grk/project/grk-project.vcxproj index 94f6e28..16a703f 100644 --- a/grk/project/grk-project.vcxproj +++ b/grk/project/grk-project.vcxproj @@ -25,6 +25,7 @@ + @@ -44,6 +45,8 @@ + + diff --git a/grk/project/grk-project.vcxproj.filters b/grk/project/grk-project.vcxproj.filters index 94a14a2..c8486a9 100644 --- a/grk/project/grk-project.vcxproj.filters +++ b/grk/project/grk-project.vcxproj.filters @@ -110,6 +110,9 @@ Header Files + + Header Files + diff --git a/grk/project/grk-project.vcxproj.filters.orig b/grk/project/grk-project.vcxproj.filters.orig new file mode 100644 index 0000000..3638fc3 --- /dev/null +++ b/grk/project/grk-project.vcxproj.filters.orig @@ -0,0 +1,150 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {0a247bb8-2e8e-4a90-b0ef-17415b0941ba} + + + {0af44075-33f4-4953-b1d6-1d28d61d758f} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + +<<<<<<< HEAD + + Shader Files + + +======= + + Shader Files + + +>>>>>>> 62afe67 (add shooting) + Shader Files + + + \ No newline at end of file diff --git a/grk/project/grk-project.vcxproj_BACKUP_1250.filters b/grk/project/grk-project.vcxproj_BACKUP_1250.filters new file mode 100644 index 0000000..3638fc3 --- /dev/null +++ b/grk/project/grk-project.vcxproj_BACKUP_1250.filters @@ -0,0 +1,150 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {0a247bb8-2e8e-4a90-b0ef-17415b0941ba} + + + {0af44075-33f4-4953-b1d6-1d28d61d758f} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + +<<<<<<< HEAD + + Shader Files + + +======= + + Shader Files + + +>>>>>>> 62afe67 (add shooting) + Shader Files + + + \ No newline at end of file diff --git a/grk/project/grk-project.vcxproj_BACKUP_1521.filters b/grk/project/grk-project.vcxproj_BACKUP_1521.filters new file mode 100644 index 0000000..3638fc3 --- /dev/null +++ b/grk/project/grk-project.vcxproj_BACKUP_1521.filters @@ -0,0 +1,150 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {0a247bb8-2e8e-4a90-b0ef-17415b0941ba} + + + {0af44075-33f4-4953-b1d6-1d28d61d758f} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + +<<<<<<< HEAD + + Shader Files + + +======= + + Shader Files + + +>>>>>>> 62afe67 (add shooting) + Shader Files + + + \ No newline at end of file diff --git a/grk/project/grk-project.vcxproj_BACKUP_1582.filters b/grk/project/grk-project.vcxproj_BACKUP_1582.filters new file mode 100644 index 0000000..3638fc3 --- /dev/null +++ b/grk/project/grk-project.vcxproj_BACKUP_1582.filters @@ -0,0 +1,150 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {0a247bb8-2e8e-4a90-b0ef-17415b0941ba} + + + {0af44075-33f4-4953-b1d6-1d28d61d758f} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + +<<<<<<< HEAD + + Shader Files + + +======= + + Shader Files + + +>>>>>>> 62afe67 (add shooting) + Shader Files + + + \ No newline at end of file diff --git a/grk/project/grk-project.vcxproj_BASE_1250.filters b/grk/project/grk-project.vcxproj_BASE_1250.filters new file mode 100644 index 0000000..778df94 --- /dev/null +++ b/grk/project/grk-project.vcxproj_BASE_1250.filters @@ -0,0 +1,134 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {0a247bb8-2e8e-4a90-b0ef-17415b0941ba} + + + {0af44075-33f4-4953-b1d6-1d28d61d758f} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + \ No newline at end of file diff --git a/grk/project/grk-project.vcxproj_BASE_1521.filters b/grk/project/grk-project.vcxproj_BASE_1521.filters new file mode 100644 index 0000000..778df94 --- /dev/null +++ b/grk/project/grk-project.vcxproj_BASE_1521.filters @@ -0,0 +1,134 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {0a247bb8-2e8e-4a90-b0ef-17415b0941ba} + + + {0af44075-33f4-4953-b1d6-1d28d61d758f} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + \ No newline at end of file diff --git a/grk/project/grk-project.vcxproj_BASE_1582.filters b/grk/project/grk-project.vcxproj_BASE_1582.filters new file mode 100644 index 0000000..778df94 --- /dev/null +++ b/grk/project/grk-project.vcxproj_BASE_1582.filters @@ -0,0 +1,134 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {0a247bb8-2e8e-4a90-b0ef-17415b0941ba} + + + {0af44075-33f4-4953-b1d6-1d28d61d758f} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + \ No newline at end of file diff --git a/grk/project/grk-project.vcxproj_LOCAL_1250.filters b/grk/project/grk-project.vcxproj_LOCAL_1250.filters new file mode 100644 index 0000000..94a14a2 --- /dev/null +++ b/grk/project/grk-project.vcxproj_LOCAL_1250.filters @@ -0,0 +1,140 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {0a247bb8-2e8e-4a90-b0ef-17415b0941ba} + + + {0af44075-33f4-4953-b1d6-1d28d61d758f} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + \ No newline at end of file diff --git a/grk/project/grk-project.vcxproj_LOCAL_1521.filters b/grk/project/grk-project.vcxproj_LOCAL_1521.filters new file mode 100644 index 0000000..94a14a2 --- /dev/null +++ b/grk/project/grk-project.vcxproj_LOCAL_1521.filters @@ -0,0 +1,140 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {0a247bb8-2e8e-4a90-b0ef-17415b0941ba} + + + {0af44075-33f4-4953-b1d6-1d28d61d758f} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + \ No newline at end of file diff --git a/grk/project/grk-project.vcxproj_LOCAL_1582.filters b/grk/project/grk-project.vcxproj_LOCAL_1582.filters new file mode 100644 index 0000000..94a14a2 --- /dev/null +++ b/grk/project/grk-project.vcxproj_LOCAL_1582.filters @@ -0,0 +1,140 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {0a247bb8-2e8e-4a90-b0ef-17415b0941ba} + + + {0af44075-33f4-4953-b1d6-1d28d61d758f} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + \ No newline at end of file diff --git a/grk/project/grk-project.vcxproj_REMOTE_1250.filters b/grk/project/grk-project.vcxproj_REMOTE_1250.filters new file mode 100644 index 0000000..14ab934 --- /dev/null +++ b/grk/project/grk-project.vcxproj_REMOTE_1250.filters @@ -0,0 +1,143 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {0a247bb8-2e8e-4a90-b0ef-17415b0941ba} + + + {0af44075-33f4-4953-b1d6-1d28d61d758f} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + \ No newline at end of file diff --git a/grk/project/grk-project.vcxproj_REMOTE_1521.filters b/grk/project/grk-project.vcxproj_REMOTE_1521.filters new file mode 100644 index 0000000..14ab934 --- /dev/null +++ b/grk/project/grk-project.vcxproj_REMOTE_1521.filters @@ -0,0 +1,143 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {0a247bb8-2e8e-4a90-b0ef-17415b0941ba} + + + {0af44075-33f4-4953-b1d6-1d28d61d758f} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + \ No newline at end of file diff --git a/grk/project/grk-project.vcxproj_REMOTE_1582.filters b/grk/project/grk-project.vcxproj_REMOTE_1582.filters new file mode 100644 index 0000000..14ab934 --- /dev/null +++ b/grk/project/grk-project.vcxproj_REMOTE_1582.filters @@ -0,0 +1,143 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {0a247bb8-2e8e-4a90-b0ef-17415b0941ba} + + + {0af44075-33f4-4953-b1d6-1d28d61d758f} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files\SOIL + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + Shader Files + + + \ No newline at end of file diff --git a/grk/project/src/Render_Utils.cpp b/grk/project/src/Render_Utils.cpp index b1cc537..4956fb7 100644 --- a/grk/project/src/Render_Utils.cpp +++ b/grk/project/src/Render_Utils.cpp @@ -189,6 +189,7 @@ void Core::drawObjectPBR(Core::RenderContext& context, glm::mat4 modelMatrix, gl glUniform1f(glGetUniformLocation(program, "spotlightPhi"), spaceship->spotlightPhi); Core::DrawContext(context); } + void Core::drawSkybox(Core::RenderContext& context, glm::mat4 modelMatrix, GLuint textureID, GLuint program) { Spaceship* spaceship = Spaceship::getInstance(); glDisable(GL_DEPTH_TEST); @@ -201,4 +202,17 @@ void Core::drawSkybox(Core::RenderContext& context, glm::mat4 modelMatrix, GLuin Core::DrawContext(context); glEnable(GL_DEPTH_TEST); +} + +void Core::loadModelToContext(std::string path, Core::RenderContext& context) +{ + Assimp::Importer import; + const aiScene* scene = import.ReadFile(path, aiProcess_Triangulate | aiProcess_CalcTangentSpace); + + if (!scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode) + { + std::cout << "ERROR::ASSIMP::" << import.GetErrorString() << std::endl; + return; + } + context.initFromAssimpMesh(scene->mMeshes[0]); } \ No newline at end of file diff --git a/grk/project/src/Render_Utils.cpp.orig b/grk/project/src/Render_Utils.cpp.orig new file mode 100644 index 0000000..53bd8e1 --- /dev/null +++ b/grk/project/src/Render_Utils.cpp.orig @@ -0,0 +1,249 @@ +#include "Render_Utils.h" + +#include +#include +#include "glew.h" +#include "freeglut.h" +#include +#include +#include +#include "../GameUtils.h" +#include "../Spaceship.h" + + + +void Core::RenderContext::initFromAssimpMesh(aiMesh* mesh) { + vertexArray = 0; + vertexBuffer = 0; + vertexIndexBuffer = 0; + + std::vector textureCoord; + std::vector indices; + //tex coord must be converted to 2d vecs + for (unsigned int i = 0; i < mesh->mNumVertices; i++) + { + if (mesh->mTextureCoords[0] != nullptr) { + textureCoord.push_back(mesh->mTextureCoords[0][i].x); + textureCoord.push_back(mesh->mTextureCoords[0][i].y); + } + else { + textureCoord.push_back(0.0f); + textureCoord.push_back(0.0f); + } + } + if (mesh->mTextureCoords[0] == nullptr) { + std::cout << "no uv coords\n"; + } + for (unsigned int i = 0; i < mesh->mNumFaces; i++) + { + aiFace face = mesh->mFaces[i]; + // retrieve all indices of the face and store them in the indices vector + for (unsigned int j = 0; j < face.mNumIndices; j++) + indices.push_back(face.mIndices[j]); + } + + unsigned int vertexDataBufferSize = sizeof(float) * mesh->mNumVertices * 3; + unsigned int vertexNormalBufferSize = sizeof(float) * mesh->mNumVertices * 3; + unsigned int vertexTexBufferSize = sizeof(float) * mesh->mNumVertices * 2; + unsigned int vertexTangentBufferSize = sizeof(float) * mesh->mNumVertices * 3; + unsigned int vertexBiTangentBufferSize = sizeof(float) * mesh->mNumVertices * 3; + + unsigned int vertexElementBufferSize = sizeof(unsigned int) * indices.size(); + size = indices.size(); + + glGenVertexArrays(1, &vertexArray); + glBindVertexArray(vertexArray); + + + glGenBuffers(1, &vertexIndexBuffer); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vertexIndexBuffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, vertexElementBufferSize, &indices[0], GL_STATIC_DRAW); + + glGenBuffers(1, &vertexBuffer); + glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); + //std::cout << vertexBuffer; + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + glEnableVertexAttribArray(2); + glEnableVertexAttribArray(3); + glEnableVertexAttribArray(4); + + glBufferData(GL_ARRAY_BUFFER, vertexDataBufferSize + vertexNormalBufferSize + vertexTexBufferSize + vertexTangentBufferSize + vertexBiTangentBufferSize, NULL, GL_STATIC_DRAW); + + glBufferSubData(GL_ARRAY_BUFFER, 0, vertexDataBufferSize, mesh->mVertices); + + glBufferSubData(GL_ARRAY_BUFFER, vertexDataBufferSize, vertexNormalBufferSize, mesh->mNormals); + + glBufferSubData(GL_ARRAY_BUFFER, vertexDataBufferSize + vertexNormalBufferSize, vertexTexBufferSize, &textureCoord[0]); + + glBufferSubData(GL_ARRAY_BUFFER, vertexDataBufferSize + vertexNormalBufferSize + vertexTexBufferSize, vertexTangentBufferSize, mesh->mTangents); + + glBufferSubData(GL_ARRAY_BUFFER, vertexDataBufferSize + vertexNormalBufferSize + vertexTexBufferSize + vertexTangentBufferSize, vertexBiTangentBufferSize, mesh->mBitangents); + + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)(0)); + glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (void*)(vertexDataBufferSize)); + glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, (void*)(vertexNormalBufferSize + vertexDataBufferSize)); + glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, 0, (void*)(vertexDataBufferSize + vertexNormalBufferSize + vertexTexBufferSize)); + glVertexAttribPointer(4, 3, GL_FLOAT, GL_FALSE, 0, (void*)(vertexDataBufferSize + vertexNormalBufferSize + vertexTexBufferSize + vertexTangentBufferSize)); + +} + +void Core::DrawVertexArray(const float * vertexArray, int numVertices, int elementSize ) +{ + glVertexAttribPointer(0, elementSize, GL_FLOAT, false, 0, vertexArray); + glEnableVertexAttribArray(0); + + glDrawArrays(GL_TRIANGLES, 0, numVertices); +} + +void Core::DrawVertexArrayIndexed( const float * vertexArray, const int * indexArray, int numIndexes, int elementSize ) +{ + glVertexAttribPointer(0, elementSize, GL_FLOAT, false, 0, vertexArray); + glEnableVertexAttribArray(0); + + glDrawElements(GL_TRIANGLES, numIndexes, GL_UNSIGNED_INT, indexArray); +} + + +void Core::DrawVertexArray( const VertexData & data ) +{ + int numAttribs = std::min(VertexData::MAX_ATTRIBS, data.NumActiveAttribs); + for(int i = 0; i < numAttribs; i++) + { + glVertexAttribPointer(i, data.Attribs[i].Size, GL_FLOAT, false, 0, data.Attribs[i].Pointer); + glEnableVertexAttribArray(i); + } + glDrawArrays(GL_TRIANGLES, 0, data.NumVertices); +} + +void Core::DrawContext(Core::RenderContext& context) +{ + + glBindVertexArray(context.vertexArray); + glDrawElements( + GL_TRIANGLES, // mode + context.size, // count + GL_UNSIGNED_INT, // type + (void*)0 // element array buffer offset + ); + glBindVertexArray(0); +} + +glm::mat4 Core::createPerspectiveMatrix() +{ + + glm::mat4 perspectiveMatrix; + float n = 0.05; + float f = 200.; + float a1 = glm::min(GameUtils::getInstance()->getAspectRatio(), 1.f); + float a2 = glm::min(1 / GameUtils::getInstance()->getAspectRatio(), 1.f); + perspectiveMatrix = glm::mat4({ + 1,0.,0.,0., + 0.,GameUtils::getInstance()->getAspectRatio(),0.,0., + 0.,0.,(f + n) / (n - f),2 * f * n / (n - f), + 0.,0.,-1.,0., + }); + + + perspectiveMatrix = glm::transpose(perspectiveMatrix); + + return perspectiveMatrix; +} + +void Core::drawObjectPBR(Core::RenderContext& context, glm::mat4 modelMatrix, glm::vec3 color, float roughness, float metallic, GLuint program) { + Spaceship* spaceship = Spaceship::getInstance(); + glm::mat4 viewProjectionMatrix = Core::createPerspectiveMatrix() * spaceship->createCameraMatrix(); + glm::mat4 transformation = viewProjectionMatrix * modelMatrix; + glUniformMatrix4fv(glGetUniformLocation(program, "transformation"), 1, GL_FALSE, (float*)&transformation); + glUniformMatrix4fv(glGetUniformLocation(program, "modelMatrix"), 1, GL_FALSE, (float*)&modelMatrix); + + glUniform1f(glGetUniformLocation(program, "exposition"), 1.f); + + glUniform1f(glGetUniformLocation(program, "roughness"), roughness); + glUniform1f(glGetUniformLocation(program, "metallic"), metallic); + + glUniform3f(glGetUniformLocation(program, "color"), color.x, color.y, color.z); + + glUniform3f(glGetUniformLocation(program, "cameraPos"), spaceship->cameraPos.x, spaceship->cameraPos.y, spaceship->cameraPos.z); + + + const int NUM_LIGHTS = 23; + + glm::vec3 lightsPositions[NUM_LIGHTS]; + glm::vec3 lightsColors[NUM_LIGHTS]; + glm::vec3 lightsDirections[NUM_LIGHTS]; + + /*glUniform3f(glGetUniformLocation(program, "sunDir"), sun.sunDir.x, sun.sunDir.y, sun.sunDir.z); + glUniform3f(glGetUniformLocation(program, "sunColor"), sun.sunColor.x, sun.sunColor.y, sun.sunColor.z);*/ + + std::list* suns = GameUtils::getInstance()->getSuns(); + glm::vec3 firstSunPos = suns->front()->getPosition(); + glm::vec3 firstSunColor = suns->front()->getColor(); + + glUniform3f(glGetUniformLocation(program, "lightPos"), firstSunPos.x, firstSunPos.y, firstSunPos.z); + glUniform3f(glGetUniformLocation(program, "lightColor"), firstSunColor.x, firstSunColor.y, firstSunColor.z); + + glUniform3f(glGetUniformLocation(program, "spotlightConeDir"), spaceship->spotlightConeDir.x, spaceship->spotlightConeDir.y, spaceship->spotlightConeDir.z); + glUniform3f(glGetUniformLocation(program, "spotlightPos"), spaceship->spotlightPos.x, spaceship->spotlightPos.y, spaceship->spotlightPos.z); + glUniform3f(glGetUniformLocation(program, "spotlightColor"), spaceship->spotlightColor.x, spaceship->spotlightColor.y, spaceship->spotlightColor.z); + glUniform1f(glGetUniformLocation(program, "spotlightPhi"), spaceship->spotlightPhi); + Core::DrawContext(context); +} +<<<<<<< HEAD +void Core::drawSkybox(Core::RenderContext& context, glm::mat4 modelMatrix, GLuint textureID, GLuint program) { + Spaceship* spaceship = Spaceship::getInstance(); + glDisable(GL_DEPTH_TEST); + glUseProgram(program); + glm::mat4 viewProjectionMatrix = Core::createPerspectiveMatrix() * spaceship->createCameraMatrix(); + glm::mat4 transformation = viewProjectionMatrix * modelMatrix; + glUniformMatrix4fv(glGetUniformLocation(program, "transformation"), 1, GL_FALSE, (float*)&transformation); + + glBindTexture(GL_TEXTURE_CUBE_MAP, textureID); + Core::DrawContext(context); + glEnable(GL_DEPTH_TEST); + +} +======= + +void Core::drawFireball(const glm::mat4& model, float radius, const glm::mat4& view, const glm::mat4& cameraMatrix) { + //GLuint shaderProgram = GameUtils::getInstance()->shaderLoader->CreateProgram("shaders/fireball.vert", "shaders/fireball.frag"); + // + //// Ustaw aktywny program cieniuj¹cy + //glUseProgram(shaderProgram); + + //// Przeka¿ wartoœci uniform do shadera + //glUniform3fv(glGetUniformLocation(shaderProgram, "cameraPosition"), 1, glm::value_ptr(cameraPosition)); + //glUniform3fv(glGetUniformLocation(shaderProgram, "flareColor"), 1, glm::value_ptr(flareColor)); + //glUniform3fv(glGetUniformLocation(shaderProgram, "lightPosition"), 1, glm::value_ptr(lightPosition)); + + //// Oblicz normalne dla efektu œwiat³a + //glm::mat3 normalMatrix = glm::transpose(glm::inverse(glm::mat3(model))); + + //// Przeka¿ macierze do shadera + //glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "model"), 1, GL_FALSE, glm::value_ptr(model)); + //glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "view"), 1, GL_FALSE, glm::value_ptr(view)); + //glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "projection"), 1, GL_FALSE, glm::value_ptr(projection)); + //glUniformMatrix3fv(glGetUniformLocation(shaderProgram, "normalMatrix"), 1, GL_FALSE, glm::value_ptr(normalMatrix)); + + //// Tutaj mo¿esz umieœciæ kod odpowiedzialny za rysowanie przygotowanego obiektu + //// Przyk³adowy kod, zak³adaj¹c, ¿e masz funkcjê renderuj¹c¹ obiekt: + //// renderObject(); + + //// Wy³¹cz program cieniuj¹cy + + //glDeleteProgram(shaderProgram); +} + +void Core::loadModelToContext(std::string path, Core::RenderContext& context) +{ + Assimp::Importer import; + const aiScene* scene = import.ReadFile(path, aiProcess_Triangulate | aiProcess_CalcTangentSpace); + + if (!scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode) + { + std::cout << "ERROR::ASSIMP::" << import.GetErrorString() << std::endl; + return; + } + context.initFromAssimpMesh(scene->mMeshes[0]); +} +>>>>>>> 62afe67 (add shooting) diff --git a/grk/project/src/Render_Utils.h b/grk/project/src/Render_Utils.h index 5c876c6..5490791 100644 --- a/grk/project/src/Render_Utils.h +++ b/grk/project/src/Render_Utils.h @@ -73,4 +73,6 @@ namespace Core glm::mat4 createPerspectiveMatrix(); void drawObjectPBR(Core::RenderContext& context, glm::mat4 modelMatrix, glm::vec3 color, float roughness, float metallic, GLuint program); + void drawFireball(const glm::mat4& model, float radius, const glm::mat4& view, const glm::mat4& cameraMatrix); + void loadModelToContext(std::string path, Core::RenderContext& context); } \ No newline at end of file diff --git a/grk/project/src/ex_9_1.hpp b/grk/project/src/ex_9_1.hpp index 4c3a850..280f606 100644 --- a/grk/project/src/ex_9_1.hpp +++ b/grk/project/src/ex_9_1.hpp @@ -45,9 +45,6 @@ GLuint programTest; GLuint programTex; GLuint programCubemap; -Core::Shader_Loader shaderLoader; - - std::list planets; Sun* sun; GLuint VAO,VBO; @@ -106,14 +103,14 @@ void renderScene(GLFWwindow* window) p->draw(time, program); } + spaceship->renderBullets(glfwGetTime(), program); + //drawObjectPBR(sphereContext, glm::translate(pointlightPos) * glm::scale(glm::vec3(1)) * glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(10.f, 0, 0)) * glm::scale(glm::vec3(0.3f)), glm::vec3(0.2, 0.7, 0.3), 0.3, 0.0, program); drawObjectPBR(models::sphereContext, glm::translate(pointlightPos) * glm::scale(glm::vec3(0.1)) * glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(4.f, 0, 0)) * glm::eulerAngleY(time) * glm::translate(glm::vec3(1.f, 0, 0)) * glm::scale(glm::vec3(0.1f)), glm::vec3(0.5, 0.5, 0.5), 0.7, 0.0, program); - drawObjectPBR(models::marbleBustContext, glm::mat4(), glm::vec3(1.f, 1.f, 1.f), 0.5f, 1.0f, program); - drawObjectPBR(models::spaceshipContext, spaceship->calculateModelMatrix(), spaceship->color, @@ -130,18 +127,7 @@ void framebuffer_size_callback(GLFWwindow* window, int width, int height) WIDTH = width; HEIGHT = height; } -void loadModelToContext(std::string path, Core::RenderContext& context) -{ - Assimp::Importer import; - const aiScene* scene = import.ReadFile(path, aiProcess_Triangulate | aiProcess_CalcTangentSpace); - if (!scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode) - { - std::cout << "ERROR::ASSIMP::" << import.GetErrorString() << std::endl; - return; - } - context.initFromAssimpMesh(scene->mMeshes[0]); -} void createSuns() { GameUtils* gu = GameUtils::getInstance(); @@ -175,27 +161,21 @@ void createSuns() { } void init(GLFWwindow* window) { + GameUtils* gameUtils = GameUtils::getInstance(); glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); glEnable(GL_DEPTH_TEST); - program = shaderLoader.CreateProgram("shaders/shader_9_1.vert", "shaders/shader_9_1.frag"); - programTest = shaderLoader.CreateProgram("shaders/test.vert", "shaders/test.frag"); - programSun = shaderLoader.CreateProgram("shaders/shader_8_sun.vert", "shaders/shader_8_sun.frag"); - programCubemap = shaderLoader.CreateProgram("shaders/shader_skybox.vert", "shaders/shader_skybox.frag"); + + program = gameUtils->shaderLoader->CreateProgram("shaders/shader_9_1.vert", "shaders/shader_9_1.frag"); + programTest = gameUtils->shaderLoader->CreateProgram("shaders/test.vert", "shaders/test.frag"); + programSun = gameUtils->shaderLoader->CreateProgram("shaders/shader_8_sun.vert", "shaders/shader_8_sun.frag"); + programCubemap = gameUtils->shaderLoader->CreateProgram("shaders/shader_skybox.vert", "shaders/shader_skybox.frag"); loadModelToContext("./models/marbleBust.obj", models::marbleBustContext); loadModelToContext("./models/spaceship.obj", models::spaceshipContext); loadModelToContext("./models/sphere.obj", models::sphereContext); loadModelToContext("./models/cube.obj", models::cubeContext); - - /*std::vector cubeFaces = { - "space_rt.png", - "space_lf.png", - "space_up.png", - "space_dn.png", - "space_bk.png", - "space_ft.png" - };*/ + Core::loadModelToContext("./models/sphere.obj", GameUtils::getInstance()->sphereContext); std::vector cubeFaces = { "bkg2_right1.png", @@ -203,24 +183,22 @@ void init(GLFWwindow* window) "bkg2_top3.png", "bkg2_bottom4.png", "bkg2_front5.png", - "bkg2_back6.png" }; texture::cubemapTexture = Core::LoadCubemap(cubeFaces); - createSuns(); } void shutdown(GLFWwindow* window) { - shaderLoader.DeleteProgram(program); + GameUtils::getInstance()->shaderLoader->DeleteProgram(program); } //obsluga wejscia void processInput(GLFWwindow* window) { - spaceship->processInput(window, deltaTime); + spaceship->processInput(window, deltaTime, glfwGetTime()); /*if (glfwGetKey(window, GLFW_KEY_1) == GLFW_PRESS) exposition -= 0.05; diff --git a/grk/project/src/ex_9_1.hpp.orig b/grk/project/src/ex_9_1.hpp.orig new file mode 100644 index 0000000..2dfc9a3 --- /dev/null +++ b/grk/project/src/ex_9_1.hpp.orig @@ -0,0 +1,252 @@ +#include "glew.h" +#include +#include "glm.hpp" +#include "ext.hpp" +#include +#include +#include +#include + +#include "Shader_Loader.h" +#include "Render_Utils.h" +#include "texture.h" + +#include "Box.cpp" +#include +#include +#include +#include +#include "../Sun.h" +#include "../Spaceship.h" +#include "../Planet.h" +#include "../GameObject.h" +#include "../GameUtils.h" + +const unsigned int SHADOW_WIDTH = 1024, SHADOW_HEIGHT = 1024; + +int WIDTH = 500, HEIGHT = 500; + +namespace models { + Core::RenderContext marbleBustContext; + Core::RenderContext spaceshipContext; + Core::RenderContext sphereContext; + Core::RenderContext cubeContext; +} +namespace texture { + GLuint cubemapTexture; +} + +GLuint depthMapFBO; +GLuint depthMap; + +GLuint program; +GLuint programSun; +GLuint programTest; +GLuint programTex; +GLuint programCubemap; + +std::list planets; +Sun* sun; +GLuint VAO,VBO; + +float exposition = 1.f; + +glm::vec3 pointlightPos = glm::vec3(0, 2, 0); +glm::vec3 pointlightColor = glm::vec3(0.9, 0.6, 0.6); + +float lastTime = -1.f; +float deltaTime = 0.f; + +Spaceship* spaceship = Spaceship::getInstance(); + +void updateDeltaTime(float time) { + if (lastTime < 0) { + lastTime = time; + return; + } + + deltaTime = time - lastTime; + if (deltaTime > 0.1) deltaTime = 0.1; + lastTime = time; +} + +void renderShadowapSun() { + float time = glfwGetTime(); + glViewport(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT); + //uzupelnij o renderowanie glebokosci do tekstury + + glBindFramebuffer(GL_FRAMEBUFFER, 0); + glViewport(0, 0, WIDTH, HEIGHT); +} +void renderScene(GLFWwindow* window) +{ + glClearColor(0.4f, 0.4f, 0.8f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + float time = glfwGetTime(); + updateDeltaTime(time); + renderShadowapSun(); + + drawSkybox(models::cubeContext, glm::translate(glm::mat4(), spaceship->cameraPos), texture::cubemapTexture, programCubemap); + + + //space lamp + glUseProgram(programSun); + + std::list* suns = GameUtils::getInstance()->getSuns(); + for (Sun* sun : *suns) { + sun->draw(); + } + + glUseProgram(program); + + for (Planet* p : planets) { + p->draw(time, program); + } + + spaceship->renderBullets(glfwGetTime(), program); + + //drawObjectPBR(sphereContext, glm::translate(pointlightPos) * glm::scale(glm::vec3(1)) * glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(10.f, 0, 0)) * glm::scale(glm::vec3(0.3f)), glm::vec3(0.2, 0.7, 0.3), 0.3, 0.0, program); + + drawObjectPBR(models::sphereContext, + glm::translate(pointlightPos) * glm::scale(glm::vec3(0.1)) * glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(4.f, 0, 0)) * glm::eulerAngleY(time) * glm::translate(glm::vec3(1.f, 0, 0)) * glm::scale(glm::vec3(0.1f)), + glm::vec3(0.5, 0.5, 0.5), 0.7, 0.0, program); + + drawObjectPBR(models::spaceshipContext, + spaceship->calculateModelMatrix(), + spaceship->color, + spaceship->roughness, spaceship->metallic, program + ); + + glUseProgram(0); + glfwSwapBuffers(window); +} +void framebuffer_size_callback(GLFWwindow* window, int width, int height) +{ + GameUtils::getInstance()->setAspectRatio(width / float(height)); + glViewport(0, 0, width, height); + WIDTH = width; + HEIGHT = height; +} + + +void createSuns() { + GameUtils* gu = GameUtils::getInstance(); + sun = new Sun(programSun, models::sphereContext, glm::vec3(0, 2, 0), glm::vec3(-0.93633f, 0.351106, 0.003226f), glm::vec3(0.9f, 0.9f, 0.7f) * 5, 1); + Planet* planet = new Planet(sun, 20.f, 0.25f, 1.f, models::sphereContext); + planets.push_back(planet); + Planet* moon = new Planet(planet, 5.f, 1.f, 0.2f, models::sphereContext); + planets.push_back(moon); + gu->getSuns()->push_back(sun); + Planet* planet2 = new Planet(sun, 50.f, 0.5f, 1.5f, models::sphereContext); + planets.push_back(planet2); + /*suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(-80, 20, 50), glm::vec3(-0.93633f, 0.351106, 0.003226f), glm::vec3(1.0f, 0.8f, 0.2f), 4.0)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(50, 40, -30), glm::vec3(-0.73633f, 0.451106, 0.023226f), glm::vec3(0.9f, 0.5f, 0.1f), 3.5)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(0, -60, 100), glm::vec3(-0.53633f, 0.551106, 0.043226f), glm::vec3(0.8f, 0.2f, 0.2f), 4.5)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(20, 80, -70), glm::vec3(0.33633f, 0.651106, 0.063226f), glm::vec3(0.5f, 0.7f, 0.9f), 3.8)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(-60, -20, 30), glm::vec3(-0.23633f, 0.751106, 0.083226f), glm::vec3(0.7f, 0.2f, 0.7f), 4.2)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(70, -50, -80), glm::vec3(-0.03633f, 0.851106, 0.103226f), glm::vec3(0.1f, 0.3f, 0.9f), 3.9)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(10, 30, 60), glm::vec3(0.13633f, -0.951106, -0.123226f), glm::vec3(0.6f, 0.9f, 0.4f), 4.3)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(-40, -80, -50), glm::vec3(0.33633f, -0.851106, -0.143226f), glm::vec3(0.7f, 0.5f, 0.2f), 3.7)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(90, 70, 20), glm::vec3(0.53633f, -0.751106, -0.163226f), glm::vec3(0.4f, 0.1f, 0.9f), 4.1)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(-30, 10, -40), glm::vec3(0.73633f, -0.651106, -0.183226f), glm::vec3(0.8f, 0.4f, 0.1f), 4.4)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(150, -100, 80), glm::vec3(0.33633f, -0.951106, -0.143226f), glm::vec3(0.2f, 0.8f, 0.5f), 3.9)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(-120, 50, -60), glm::vec3(0.73633f, 0.551106, 0.103226f), glm::vec3(0.9f, 0.2f, 0.7f), 3.6)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(0, 120, -150), glm::vec3(-0.23633f, -0.751106, 0.083226f), glm::vec3(0.5f, 0.6f, 0.9f), 3.4)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(-180, -50, 120), glm::vec3(0.13633f, 0.351106, -0.003226f), glm::vec3(0.7f, 0.9f, 0.2f), 4.2)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(60, -150, 180), glm::vec3(-0.93633f, -0.451106, -0.023226f), glm::vec3(0.3f, 0.7f, 0.8f), 3.8)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(100, 80, -120), glm::vec3(0.53633f, -0.651106, 0.163226f), glm::vec3(0.8f, 0.1f, 0.4f), 4.5)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(-50, -180, 150), glm::vec3(-0.33633f, 0.951106, -0.083226f), glm::vec3(0.4f, 0.8f, 0.6f), 3.5)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(200, 150, -100), glm::vec3(0.03633f, 0.151106, 0.103226f), glm::vec3(0.6f, 0.2f, 0.9f), 3.9)); + suns.push_back(&Sun(programSun, models::sphereContext, glm::vec3(-150, -100, -50), glm::vec3(0.83633f, -0.251106, -0.123226f), glm::vec3(0.7f, 0.5f, 0.8f), 4.1));*/ +} +void init(GLFWwindow* window) +{ + GameUtils* gameUtils = GameUtils::getInstance(); + glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); + + glEnable(GL_DEPTH_TEST); +<<<<<<< HEAD + program = shaderLoader.CreateProgram("shaders/shader_9_1.vert", "shaders/shader_9_1.frag"); + programTest = shaderLoader.CreateProgram("shaders/test.vert", "shaders/test.frag"); + programSun = shaderLoader.CreateProgram("shaders/shader_8_sun.vert", "shaders/shader_8_sun.frag"); + programCubemap = shaderLoader.CreateProgram("shaders/shader_skybox.vert", "shaders/shader_skybox.frag"); + + loadModelToContext("./models/marbleBust.obj", models::marbleBustContext); + loadModelToContext("./models/spaceship.obj", models::spaceshipContext); + loadModelToContext("./models/sphere.obj", models::sphereContext); + loadModelToContext("./models/cube.obj", models::cubeContext); + + /*std::vector cubeFaces = { + "space_rt.png", + "space_lf.png", + "space_up.png", + "space_dn.png", + "space_bk.png", + "space_ft.png" + };*/ + + std::vector cubeFaces = { + "bkg2_right1.png", + "bkg2_left2.png", + "bkg2_top3.png", + "bkg2_bottom4.png", + "bkg2_front5.png", + "bkg2_back6.png" + }; + + texture::cubemapTexture = Core::LoadCubemap(cubeFaces); + +======= + program = gameUtils->shaderLoader->CreateProgram("shaders/shader_9_1.vert", "shaders/shader_9_1.frag"); + programTest = gameUtils->shaderLoader->CreateProgram("shaders/test.vert", "shaders/test.frag"); + programSun = gameUtils->shaderLoader->CreateProgram("shaders/shader_8_sun.vert", "shaders/shader_8_sun.frag"); + + //loadModelToContext("./models/sphere.obj", sphereContext); + //loadModelToContext("./models/spaceship.obj", spaceship.context); + + + + Core::loadModelToContext("./models/marbleBust.obj", models::marbleBustContext); + Core::loadModelToContext("./models/spaceship.obj", models::spaceshipContext); + Core::loadModelToContext("./models/sphere.obj", models::sphereContext); + Core::loadModelToContext("./models/sphere.obj", GameUtils::getInstance()->sphereContext); +>>>>>>> 62afe67 (add shooting) + + createSuns(); +} + +void shutdown(GLFWwindow* window) +{ + GameUtils::getInstance()->shaderLoader->DeleteProgram(program); +} + +//obsluga wejscia +void processInput(GLFWwindow* window) +{ + spaceship->processInput(window, deltaTime, glfwGetTime()); + + /*if (glfwGetKey(window, GLFW_KEY_1) == GLFW_PRESS) + exposition -= 0.05; + if (glfwGetKey(window, GLFW_KEY_2) == GLFW_PRESS) + exposition += 0.05;*/ + + if (glfwGetKey(window, GLFW_KEY_3) == GLFW_PRESS) { + printf("GameUtils::spaceshipPos = glm::vec3(%ff, %ff, %ff);\n",spaceship->spaceshipPos.x,spaceship->spaceshipPos.y,spaceship->spaceshipPos.z); + printf("GameUtils::spaceshipDir = glm::vec3(%ff, %ff, %ff);\n",spaceship->spaceshipDir.x,spaceship->spaceshipDir.y,spaceship->spaceshipDir.z); + } + + //cameraDir = glm::normalize(-cameraPos); + +} + +// funkcja jest glowna petla +void renderLoop(GLFWwindow* window) { + while (!glfwWindowShouldClose(window)) + { + processInput(window); + + renderScene(window); + glfwPollEvents(); + } +} +//} \ No newline at end of file diff --git a/grk/project/src/main.cpp b/grk/project/src/main.cpp index 4e939cd..1bf7d23 100644 --- a/grk/project/src/main.cpp +++ b/grk/project/src/main.cpp @@ -6,8 +6,8 @@ #include #include -#include "ex_9_1.hpp" +#include "ex_9_1.hpp" int main(int argc, char** argv)