diff --git a/grk-project.vcxproj b/grk-project.vcxproj index 6373cff..793bdd8 100644 --- a/grk-project.vcxproj +++ b/grk-project.vcxproj @@ -43,6 +43,7 @@ + diff --git a/grk-project.vcxproj.filters b/grk-project.vcxproj.filters index ff3535b..de22e09 100644 --- a/grk-project.vcxproj.filters +++ b/grk-project.vcxproj.filters @@ -136,5 +136,8 @@ Source Files + + Header Files + \ No newline at end of file diff --git a/models/textures/Jupiter/2k_jupiter.png b/models/textures/Jupiter/2k_jupiter.png new file mode 100644 index 0000000..3dbc2b9 Binary files /dev/null and b/models/textures/Jupiter/2k_jupiter.png differ diff --git a/models/textures/Neptune/2k_neptune.png b/models/textures/Neptune/2k_neptune.png new file mode 100644 index 0000000..15aee3e Binary files /dev/null and b/models/textures/Neptune/2k_neptune.png differ diff --git a/shaders/shader_bloom.frag b/shaders/shader_bloom.frag index 4a55748..8812fb9 100644 --- a/shaders/shader_bloom.frag +++ b/shaders/shader_bloom.frag @@ -57,7 +57,7 @@ vec3 fastAA() void main() { - const float gamma = 0.9f; + const float gamma = 0.7f; vec3 hdrColor = fastAA(); //texture(scene, vTexCoords).rgb; vec3 bloomColor = texture(bloomBlur, vTexCoords).rgb; hdrColor += bloomColor; diff --git a/src/Object.h b/src/Object.h index 804ef95..8b83133 100644 --- a/src/Object.h +++ b/src/Object.h @@ -34,6 +34,10 @@ public: void SetMatrix(glm::mat4 _mat) { this->modelM = _mat; this->invModelM = glm::inverseTranspose(_mat); } + void manualSetRotationM(glm::mat4 rot) {this->rotationM = rot;} + void manualSetPosition(glm::vec3 pos) { this->position = pos; } + glm::mat4 getRotationM() { return rotationM; } + std::string GetName() { return this->name; } glm::mat4 GetMatrix() { return this->modelM; } glm::mat4 GetInvMatrix() { return this->invModelM; } @@ -60,10 +64,10 @@ private: void SetMatrix(); std::shared_ptr modelParent; - std::string name; glm::mat4 modelM; glm::mat4 invModelM; + glm::mat4 rotationM; GLuint textureID; GLuint shaderID; glm::vec3 color; diff --git a/src/main.cpp b/src/main.cpp index 9953c71..628052f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -106,6 +106,9 @@ GLuint sunTexture; GLuint earthTexture; GLuint marsTexture; GLuint moonTexture; +GLuint icyTexture; +GLuint neptunTexture; +GLuint jowisTexture; GLuint skyboxTexture; GLuint particleTexture; @@ -118,7 +121,7 @@ std::shared_ptr crewmate; //asteroids GLuint bufferAsteroids; -int asteroidAmount = 100; +int asteroidAmount = 500; int engineLightTimer = 50; float frustumScale = 1.f; @@ -132,7 +135,7 @@ glm::vec3 cameraUp; glm::mat4 cameraMatrix, perspectiveMatrix; glm::vec3 sunPos = glm::vec3(10.0f, 0.0f, -5.0f); -glm::vec3 sunPos2 = glm::vec3(25.0f, -1.0f, 10.0f); +glm::vec3 sunPos2 = glm::vec3(45.0f, -10.0f, 20.0f); //physics physx::PxShape* rectangleShape; @@ -141,7 +144,6 @@ physx::PxMaterial* material; std::vector dynamicObjects; std::vector staticObjects; Object* findObject(std::string name); -glm::mat4 shipRotationMatrix; //particlepart struct Particle { @@ -351,21 +353,15 @@ void updateAsteroid() glm::mat4 createCameraMatrix() { - //cameraDir = glm::vec3(cosf(cameraAngle), 0.0f, sinf(cameraAngle)); - //glm::vec3 up = glm::vec3(0, 1, 0); - Object* ship = findObject("Corvette"); - glm::mat4 shipModelMatrix = ship->GetMatrix(); - glm::mat4 offset = glm::translate(shipModelMatrix, glm::vec3(0, -2500, -8000)); - glm::mat4 cameraDirection = glm::translate(shipModelMatrix, glm::vec3(0, 0, 1000)); - glm::mat4 cameraUpwards = glm::translate(shipModelMatrix, glm::vec3(0, -1000, 0)); - cameraDir = glm::vec3(cameraDirection[3][0] - shipModelMatrix[3][0], cameraDirection[3][1] - shipModelMatrix[3][1], cameraDirection[3][2] - shipModelMatrix[3][2]); - cameraPos = glm::vec3(offset[3][0], offset[3][1], offset[3][2]); - cameraUp = glm::normalize(glm::vec3(cameraUpwards[3][0] - shipModelMatrix[3][0], cameraUpwards[3][1] - shipModelMatrix[3][1], cameraUpwards[3][2] - shipModelMatrix[3][2])); - cameraSide = glm::normalize(glm::cross(cameraDir, cameraUp)); - //return Core::createViewMatrix(cameraPos, cameraDir, up); - return glm::lookAt(cameraPos, ship->getPositionFromMatrix(glm::translate(shipModelMatrix, glm::vec3(0,-500,0))), cameraUp); + auto rotationM = ship->getRotationM(); + cameraPos = glm::mat3(rotationM) * glm::vec3(0, -0.5, -1.5f) + ship->GetPosition(); + cameraDir = glm::mat3(rotationM) * glm::vec3(0, 0, 1); + cameraUp = glm::mat3(rotationM) * glm::vec3(0, -1, 0); + cameraSide = glm::normalize(glm::cross(cameraDir, cameraUp)); + glm::vec3 cameraLookAt = glm::mat3(rotationM) * glm::vec3(0, -0.5, 0.25) + ship->GetPosition(); + return glm::lookAt(cameraPos, cameraLookAt, cameraUp); } void drawAsteroids() @@ -553,7 +549,7 @@ void updateObjects() Object *moon = findObject("Moon"); Object *earth = findObject("Earth"); - auto earthPos = earth->findOrbit(lastTime / 5.0f, sunPos, glm::vec3(0, 1, 0), glm::vec3(-10.5f, 0.0f, -10.5f)); + auto earthPos = earth->findOrbit(lastTime / 5.0f, sunPos, glm::vec3(0, 1, 0), glm::vec3(-20.5f, 0.0f, -20.5f)); earth->SetPosition(earthPos); earth->SetRotation(glm::vec3(0, 0, 1), lastTime); auto actorEarth = getActor("Earth"); @@ -569,6 +565,36 @@ void updateObjects() auto marsPos = mars->findOrbit(lastTime / 5.0f, sunPos2, glm::vec3(0, 1, 0), glm::vec3(-6.5f, 0.0f, -6.5f)); mars->SetPosition(marsPos); mars->SetRotation(glm::vec3(0, 0, 1), lastTime / 2.0f); + + Object *jowis = findObject("Jowis"); + Object *jowisMoon1 = findObject("MoonJup1"); + Object *jowisMoon2 = findObject("MoonJup2"); + + auto jowisPos = jowis->findOrbit(lastTime / 15.0f, sunPos, glm::vec3(0, 1, 0), glm::vec3(-55.5f, 2.0f, -55.5f)); + jowis->SetPosition(jowisPos); + jowis->SetRotation(glm::vec3(0, 0, 1), lastTime/2.0f); + + auto jowisMoon1Pos = jowisMoon1->findOrbit(lastTime, jowisPos, glm::vec3(1, 0, 0), glm::vec3(0, 3.5, 0)); + jowisMoon1->SetPosition(jowisMoon1Pos); + jowisMoon1->SetRotation(glm::vec3(1, 0, 0), lastTime / 4.0f); + auto actorMoon1Jowis = getActor("MoonJup1"); + actorMoon1Jowis->setKinematicTarget(PxTransform(PxVec3(jowisMoon1Pos.x, jowisMoon1Pos.y, jowisMoon1Pos.z))); + + auto jowisMoon2Pos = jowisMoon2->findOrbit(lastTime, jowisPos, glm::vec3(-1, 0, 0), glm::vec3(0, 5, 0)); + jowisMoon2->SetPosition(jowisMoon2Pos); + jowisMoon2->SetRotation(glm::vec3(1, 0, 0), lastTime / 5.0f); + auto actorMoon2Jowis = getActor("MoonJup2"); + actorMoon2Jowis->setKinematicTarget(PxTransform(PxVec3(jowisMoon2Pos.x, jowisMoon2Pos.y, jowisMoon2Pos.z))); + + Object *neptun = findObject("Neptun"); + auto neptunPos = neptun->findOrbit(lastTime / 17.0f, sunPos, glm::vec3(0, 1, 0), glm::vec3(-85.5f, -2.0f, -85.5f)); + neptun->SetPosition(neptunPos); + neptun->SetRotation(glm::vec3(1, 0, 0), lastTime / 2.0f); + + Object *deadstar = findObject("Dead star"); + auto starPos = deadstar->findOrbit(lastTime / 35.0f, sunPos, glm::vec3(0, 1, 0), glm::vec3(-135.5f, 0.0f, -135.5f)); + deadstar->SetPosition(starPos); + deadstar->SetRotation(glm::vec3(0, 0, 1), lastTime / 12.0f); } void updatePhysics() @@ -599,8 +625,8 @@ void updatePhysics() physx::PxQuat rot = transform.q; glm::quat rotQuat = glm::quat(rot.x, rot.y, rot.z, rot.w); glm::mat4 rotationMatrix = glm::toMat4(rotQuat); - if (obj->GetName() == "Corvette") - shipRotationMatrix = rotationMatrix; + obj->manualSetRotationM(rotationMatrix); + obj->manualSetPosition(pos); glm::vec3 scale = obj->GetScale(); glm::mat4 model = glm::translate(pos)*rotationMatrix*glm::scale(scale); @@ -854,8 +880,8 @@ void initPhysics() void initAsteroids() { int amount = asteroidAmount; - float radius = 7.0; - float offset = 2.0f; + float radius = 15.0; + float offset = 3.0f; for (int i=0; i < amount; i++) { @@ -872,7 +898,7 @@ void initAsteroids() float z = cos(angle) * radius + displacement; model = glm::translate(model, glm::vec3(x, y, z)); - float scale = (rand() % 20) / 100.0f + 0.05; + float scale = (rand() % 20) / 100.0f + 0.2; model = glm::scale(model, glm::vec3(scale)); float rotAngle = (rand() % 360); @@ -973,11 +999,11 @@ void initBloom() void initObjects() { Object obj = Object("BigSun", sphere, sunTexture, programSun, glm::vec3(3.5f, 3.8f, 3.8f), - sunPos, glm::vec3(0.1f), glm::vec3(3.0f, 3.0f, 3.0f), 0.0f, false, false); + sunPos, glm::vec3(0.1f), glm::vec3(5.0f), 0.0f, false, false); objects.push_back(obj); obj = Object("SmollSun", sphere, sunTexture, programSun, glm::vec3(0.9f, 0.9f, 2.0f), - sunPos2, glm::vec3(0.1f), glm::vec3(1), 0, false, false); + sunPos2, glm::vec3(0.1f), glm::vec3(2.5f), 0, false, false); objects.push_back(obj); Object planet = Object("Earth", sphere, earthTexture, programTex, glm::vec3(1.0f), @@ -988,17 +1014,37 @@ void initObjects() glm::vec3(-6.5f, 0.0f, -6.5f), glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(0.4f), 0, false, true); objects.push_back(planet); + planet = Object("Jowis", sphere, jowisTexture, programTex, glm::vec3(1.0f), + glm::vec3(-20.5f, 0.0f, -6.5f), glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(2.5f), 0, false, true); + objects.push_back(planet); + + planet = Object("Neptun", sphere, neptunTexture, programTex, glm::vec3(1.0f), + glm::vec3(-40.5f, 0.0f, -6.5f), glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(0.7f), 0, false, true); + objects.push_back(planet); + + planet = Object("Dead star", sphere, icyTexture, programTex, glm::vec3(1.0f), + glm::vec3(-60.5f, 0.0f, -60.5f), glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(5.0f), 0, false, true); + objects.push_back(planet); + Object moon = Object("Moon", sphere, moonTexture, programTex, glm::vec3(1.0f), glm::vec3(0, 2, 2), glm::vec3(1.5f, 1.0f, 1.0f), glm::vec3(0.3f, 0.3f, 0.3f), 0, false, true); objects.push_back(moon); + moon = Object("MoonJup1", sphere, moonTexture, programTex, glm::vec3(1.0f), + glm::vec3(0, 2, 2), glm::vec3(1.5f, 1.0f, 1.0f), glm::vec3(0.4f), 0, false, true); + objects.push_back(moon); + + moon = Object("MoonJup2", sphere, moonTexture, programTex, glm::vec3(1.0f), + glm::vec3(0, 2, 2), glm::vec3(1.5f, 1.0f, 1.0f), glm::vec3(0.3f), 0, false, true); + objects.push_back(moon); + Object crewmateObj = Object("Space Humster", crewmate, programNormal, glm::vec3(1.0f), glm::vec3(-5, 0, 0), glm::vec3(1, 0, 1), glm::vec3(0.1), 0, true, false); objects.push_back(crewmateObj); //glm::mat4 shipModelMatrix = glm::translate(cameraPos + cameraDir * 0.7f + glm::vec3(0, -0.25f, 0)) * glm::rotate(-cameraAngle + glm::radians(90.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.0001f));; Object ship = Object("Corvette", corvette, programNormal, glm::vec3(1.0f), - cameraPos+glm::vec3(-10,-0.3,0), glm::vec3(0, 1, 0), glm::vec3(0.0001f), 75, true, false); + cameraPos+glm::vec3(75,-0.3,50), glm::vec3(0, 1, 0), glm::vec3(0.0001f), 60, true, false); objects.push_back(ship); } @@ -1032,7 +1078,10 @@ void init() earthTexture = Core::LoadTexture("textures/earth2.png"); moonTexture = Core::LoadTexture("textures/moon.png"); particleTexture = Core::LoadTexture("textures/sun.png"); + icyTexture = Core::LoadTexture("textures/icy.png"); marsTexture = Core::LoadTexture("models/textures/Mars/2k_mars.png"); + jowisTexture = Core::LoadTexture("models/textures/Jupiter/2k_jupiter.png"); + neptunTexture = Core::LoadTexture("models/textures/Neptune/2k_neptune.png"); skyboxTexture = loadCubemap(faces); initParticles(); @@ -1044,13 +1093,13 @@ void init() Light l1; l1.position = sunPos; l1.color = glm::vec3(0.8f, 0.8f, 0.7f); - l1.intensity = 105; + l1.intensity = 450; lights.push_back(l1); Light l2; l2.position = sunPos2; l2.color = glm::vec3(0.5f, 0.5f, 0.5f); - l2.intensity = 55; + l2.intensity = 155; lights.push_back(l2); Light l3; diff --git a/src/main.h b/src/main.h new file mode 100644 index 0000000..e69de29 diff --git a/textures/Icy.png b/textures/Icy.png new file mode 100644 index 0000000..eb776be Binary files /dev/null and b/textures/Icy.png differ