From 8b3c0452370092b64d63b7c5c209e01abf7ce6cc Mon Sep 17 00:00:00 2001 From: Adrian Charkiewicz Date: Tue, 26 Jan 2021 22:24:47 +0100 Subject: [PATCH 1/2] engine offset not working, keyboard change, cameraFace change --- grk-project.vcxproj | 6 +++--- src/main.cpp | 40 ++++++++++++++++++++++++++++------------ 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/grk-project.vcxproj b/grk-project.vcxproj index 09917c8..672ac76 100644 --- a/grk-project.vcxproj +++ b/grk-project.vcxproj @@ -49,7 +49,7 @@ {1B448102-E76C-4347-BDC7-40D02A567DB6} Win32Proj grk-cw9 - 10.0.17134.0 + 10.0 grk-project @@ -57,14 +57,14 @@ Application true Unicode - v141 + v142 Application false true Unicode - v141 + v142 diff --git a/src/main.cpp b/src/main.cpp index b97423c..3a16ac3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,4 @@ -#include "glew.h" +#include "glew.h" #include "freeglut.h" #include "glm.hpp" #include "ext.hpp" @@ -53,6 +53,8 @@ std::vector corvetteMeshes; float cameraAngle = 0; glm::vec3 cameraPos = glm::vec3(-6, 0, 0); glm::vec3 cameraDir; +glm::vec3 cameraSide; + glm::mat4 cameraMatrix, perspectiveMatrix; @@ -89,8 +91,8 @@ void keyboard(unsigned char key, int x, int y) float moveSpeed = 0.1f; switch (key) { - case 'z': cameraAngle -= angleSpeed; break; - case 'x': cameraAngle += angleSpeed; break; + case 'q': cameraAngle -= angleSpeed; break; + case 'e': cameraAngle += angleSpeed; break; case 'w': { cameraPos += cameraDir * moveSpeed; @@ -101,8 +103,8 @@ void keyboard(unsigned char key, int x, int y) case 's': cameraPos -= cameraDir * moveSpeed; break; case 'd': cameraPos += glm::cross(cameraDir, glm::vec3(0, 1, 0)) * moveSpeed; break; case 'a': cameraPos -= glm::cross(cameraDir, glm::vec3(0, 1, 0)) * moveSpeed; break; - case 'e': cameraPos += glm::cross(cameraDir, glm::vec3(1, 0, 0)) * moveSpeed; break; - case 'q': cameraPos -= glm::cross(cameraDir, glm::vec3(1, 0, 0)) * moveSpeed; break; + case 'z': cameraPos += glm::cross(cameraDir, glm::vec3(0, 0, 1)) * moveSpeed; break; + case 'x': cameraPos -= glm::cross(cameraDir, glm::vec3(0, 0, 1)) * moveSpeed; break; } } @@ -112,6 +114,8 @@ glm::mat4 createCameraMatrix() cameraDir = glm::vec3(cosf(cameraAngle), 0.0f, sinf(cameraAngle)); glm::vec3 up = glm::vec3(0, 1, 0); + cameraSide = glm::cross(cameraDir,up); + return Core::createViewMatrix(cameraPos, cameraDir, up); } float frustumScale = 1.f; @@ -249,10 +253,10 @@ void renderScene() glUseProgram(programSun); glUniform3f(glGetUniformLocation(programSun, "cameraPos"), cameraPos.x, cameraPos.y, cameraPos.z); - //ustalanie pozycji s³oñc (lightPos) + //ustalanie pozycji s³oñc (lightPos) - //rysowanie s³oñc + //rysowanie s³oñc glm::mat4 sunModelMatrix = glm::mat4(1.0f); sunModelMatrix = glm::translate(sunModelMatrix, sunPos); sunModelMatrix = glm::scale(sunModelMatrix, glm::vec3(3.0f, 3.0f, 3.0f)); @@ -269,8 +273,13 @@ void renderScene() lights[0].position = sunPos; lights[1].position = sunPos2; - lights[2].position = cameraPos + cameraDir * 0.6f + glm::vec3(0, -0.25f, 0); - lights[2].color = glm::vec3(1.0f, 0.0f, 0.0f); + //lights[2].position = cameraPos + cameraDir * 0.5f + glm::vec3(0, -0.25f, 0); + //lights[2].position = glm::vec3(cameraPos.x + cameraDir.x * 0.5f +0.f , cameraPos.y-0.25f, cameraPos.z + cameraDir.z * 0.5f ); + glm::mat4 engineLightPos = glm::translate(cameraPos + cameraDir * 0.3f + cameraSide * -0.5f + glm::vec3(0, -0.25f, 0)) * glm::rotate(-cameraAngle, glm::vec3(0, 1, 0)); + lights[2].position = glm::vec3(engineLightPos[3][0], engineLightPos[3][1], engineLightPos[3][2]); + + + lights[2].color = glm::vec3(1.0f, -0.0f, 0.0f); for (int i = 0; i < lights.size(); i++) { @@ -286,13 +295,14 @@ void renderScene() //rysowanie statku - glm::mat4 shipModelMatrix = glm::translate(cameraPos + cameraDir * 0.6f + glm::vec3(0, -0.25f, 0)) * glm::rotate(-cameraAngle + glm::radians(90.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.0001f)); - drawFromAssimpModel(programTex, corvette, shipModelMatrix, glm::vec3(1)); + //glm::mat4 shipModelMatrix = glm::translate(cameraPos + cameraDir * 0.6f + glm::vec3(0, -0.25f, 0)) * glm::rotate(-cameraAngle + glm::radians(90.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.0001f)); + glm::mat4 shipModelMatrix = glm::translate(cameraPos + cameraDir * 0.6f + glm::vec3(0, -0.25f, 0)) * glm::rotate(-cameraAngle + glm::radians(90.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.0001f)); +drawFromAssimpModel(programTex, corvette, shipModelMatrix, glm::vec3(1)); - //rysowanie Ziemi z ksiê¿ycem + //rysowanie Ziemi z ksiê¿ycem glm::mat4 earth = drawPlanet(time / 5.0f, sunPos*glm::vec3(1.5f,1,1), glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(-10.5f, 0.0f, -10.5f), glm::vec3(0.5f, 0.5f, 0.5f)); glm::mat4 moon = drawMoon(earth, time/2.0f, glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(0, 1, 1), glm::vec3(1.5f, 1.0f, 1.0f), glm::vec3(0.3f, 0.3f, 0.3f)); earth = glm::rotate(earth, time/3.0f, glm::vec3(0.0f, 0.0f, 1.0f)); @@ -386,6 +396,12 @@ int main(int argc, char** argv) init(); glutKeyboardFunc(keyboard); + + //to sprawia, że obiekty ukryte przed kamerÄ… nie sÄ… renderowane + glEnable(GL_CULL_FACE); + glCullFace(GL_BACK); + glFrontFace(GL_CW); + glutDisplayFunc(renderScene); glutIdleFunc(idle); From a89f80d68bd20c94ca0d30d030757a829c339a78 Mon Sep 17 00:00:00 2001 From: xkamikoo <58092037+xkamikoo@users.noreply.github.com> Date: Tue, 26 Jan 2021 23:18:54 +0100 Subject: [PATCH 2/2] engine lights --- grk-project.vcxproj | 4 ++-- shaders/shader_4_tex.frag | 2 +- src/main.cpp | 30 +++++++++++++++++++++--------- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/grk-project.vcxproj b/grk-project.vcxproj index 672ac76..4fdbc9a 100644 --- a/grk-project.vcxproj +++ b/grk-project.vcxproj @@ -49,7 +49,7 @@ {1B448102-E76C-4347-BDC7-40D02A567DB6} Win32Proj grk-cw9 - 10.0 + 10.0.17134.0 grk-project @@ -64,7 +64,7 @@ false true Unicode - v142 + v141 diff --git a/shaders/shader_4_tex.frag b/shaders/shader_4_tex.frag index 096d4ce..d897c8e 100644 --- a/shaders/shader_4_tex.frag +++ b/shaders/shader_4_tex.frag @@ -6,7 +6,7 @@ struct PointLight { float intensity; }; -#define NR_POINT_LIGHTS 3 +#define NR_POINT_LIGHTS 5 uniform vec3 objectColor; uniform vec3 lightPos; diff --git a/src/main.cpp b/src/main.cpp index 3a16ac3..a74a9f1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -97,6 +97,7 @@ void keyboard(unsigned char key, int x, int y) { cameraPos += cameraDir * moveSpeed; lights[2].intensity = 0.001; + lights[3].intensity = 0.001; engineLightTimer = 0; break; } @@ -273,13 +274,13 @@ void renderScene() lights[0].position = sunPos; lights[1].position = sunPos2; - //lights[2].position = cameraPos + cameraDir * 0.5f + glm::vec3(0, -0.25f, 0); - //lights[2].position = glm::vec3(cameraPos.x + cameraDir.x * 0.5f +0.f , cameraPos.y-0.25f, cameraPos.z + cameraDir.z * 0.5f ); - glm::mat4 engineLightPos = glm::translate(cameraPos + cameraDir * 0.3f + cameraSide * -0.5f + glm::vec3(0, -0.25f, 0)) * glm::rotate(-cameraAngle, glm::vec3(0, 1, 0)); - lights[2].position = glm::vec3(engineLightPos[3][0], engineLightPos[3][1], engineLightPos[3][2]); + glm::mat4 shipModelMatrix = glm::translate(cameraPos + cameraDir * 0.6f + glm::vec3(0, -0.25f, 0)) * glm::rotate(-cameraAngle + glm::radians(90.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.0001f)); + glm::mat4 engineLeft = glm::translate(shipModelMatrix, glm::vec3(500,0,-1500)); + lights[2].position = glm::vec3(engineLeft[3][0], engineLeft[3][1], engineLeft[3][2]); + glm::mat4 engineRight = glm::translate(shipModelMatrix, glm::vec3(-500, 0, -1500)); + lights[3].position = glm::vec3(engineRight[3][0], engineRight[3][1], engineRight[3][2]); - lights[2].color = glm::vec3(1.0f, -0.0f, 0.0f); for (int i = 0; i < lights.size(); i++) { @@ -296,8 +297,8 @@ void renderScene() //rysowanie statku //glm::mat4 shipModelMatrix = glm::translate(cameraPos + cameraDir * 0.6f + glm::vec3(0, -0.25f, 0)) * glm::rotate(-cameraAngle + glm::radians(90.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.0001f)); - glm::mat4 shipModelMatrix = glm::translate(cameraPos + cameraDir * 0.6f + glm::vec3(0, -0.25f, 0)) * glm::rotate(-cameraAngle + glm::radians(90.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.0001f)); -drawFromAssimpModel(programTex, corvette, shipModelMatrix, glm::vec3(1)); + + drawFromAssimpModel(programTex, corvette, shipModelMatrix, glm::vec3(1)); @@ -310,7 +311,11 @@ drawFromAssimpModel(programTex, corvette, shipModelMatrix, glm::vec3(1)); drawObjectTexture(programTex, sphereContext, moon, glm::vec3(0.9f, 1.0f, 0.9f), moonTexture); if (engineLightTimer < 50) engineLightTimer++; - else lights[2].intensity = 0.0001; + else + { + lights[2].intensity = 0.00001; + lights[3].intensity = 0.00001; + } glUseProgram(0); glutSwapBuffers(); @@ -355,10 +360,17 @@ void init() Light l3; l3.position = engineLight; - l3.color = glm::vec3(0.5f, 0.5f, 0.5f); + l3.color = glm::vec3(1.0f, -0.0f, 0.0f); l3.intensity = 0.0001; lights.push_back(l3); + Light l4; + l4.position = engineLight; + l4.color = glm::vec3(1.0f, -0.0f, 0.0f); + l4.intensity = 0.0001; + lights.push_back(l4); + + } void shutdown()