diff --git a/headers/camera.hpp b/headers/camera.hpp index 186a073..e21f414 100644 --- a/headers/camera.hpp +++ b/headers/camera.hpp @@ -7,10 +7,7 @@ public: Camera(glm::vec3 pos, float yaw, float pitch, float fov, float aspect); ~Camera(); void setPos(glm::vec3 pos); - void addPos(glm::vec3 pos); - void addFPos(glm::vec3 pos); void setRotate(float yaw, float pitch); - void addRotate(float yaw, float pitch); glm::mat4 getView(); glm::mat4 getProjection(); float aspect; diff --git a/shaders/lighting/Frag.glsl b/shaders/lighting/Frag.glsl index f0ed3ef..a3d7ace 100644 --- a/shaders/lighting/Frag.glsl +++ b/shaders/lighting/Frag.glsl @@ -6,43 +6,35 @@ struct Material { float shininess; }; - -struct Light { - vec3 position; - vec3 ambient; - vec3 diffuse; - vec3 specular; -}; - - out vec4 FragColor; in vec3 FragPos; in vec3 Normal; uniform vec3 ourColor; +uniform vec3 lightColor; +uniform vec3 lightPos; uniform vec3 viewPos; uniform Material material; -uniform Light light; void main() { //misc vec3 norm = normalize(Normal); - vec3 lightDir = normalize(light.position - FragPos); + vec3 lightDir = normalize(lightPos - FragPos); // ambient - vec3 ambient = light.ambient * material.ambient; + vec3 ambient = vec3(0.2) * (lightColor * material.ambient); // diffuse float diff = max(dot(norm, lightDir), 0.0); - vec3 diffuse = light.diffuse * (diff * material.diffuse); + vec3 diffuse = lightColor * (diff * material.diffuse); // specular vec3 viewDir = normalize(viewPos - FragPos); vec3 reflectDir = reflect(-lightDir, norm); float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); - vec3 specular = light.specular * (spec * material.specular); + vec3 specular = vec3(0.5) * (lightColor * (spec * material.specular)); //out vec3 result = ambient + diffuse + specular; diff --git a/src/camera.cpp b/src/camera.cpp index ed568e9..c5863de 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -16,28 +16,8 @@ void Camera::setRotate(float yaw, float pitch) { update(); } -void Camera::addRotate(float yaw, float pitch) { - this->yaw += yaw; - this->pitch += pitch; - if (this->pitch > 89.0f) - this->pitch = 89.0f; - if (this->pitch < -89.0f) - this->pitch = -89.0f; - update(); -} - void Camera::setPos(glm::vec3 pos) { this->pos = pos; } -void Camera::addPos(glm::vec3 pos) { this->pos += pos; } - -void Camera::addFPos(glm::vec3 pos) { - glm::vec3 f = glm::normalize(glm::vec3(front.x, 0, front.z)); - glm::vec3 r = glm::normalize(glm::cross(f, up)); - this->pos += f * pos.x; - this->pos += up * pos.y; - this->pos += r * pos.z; -} - void Camera::update() { glm::vec3 direction; direction.x = cos(glm::radians(yaw)) * cos(glm::radians(pitch)); diff --git a/src/main.cpp b/src/main.cpp index efc0045..454c0a4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,12 +10,8 @@ #define UNUSED(x) (void)(x) -glm::vec3 processInput(GLFWwindow *window); +void processInput(GLFWwindow *window); void framebuffer_size_callback(GLFWwindow *window, int width, int height); -void mouse_callback(GLFWwindow *window, double xpos, double ypos); - -float deltaTime = 0; - GLFWwindow *init() { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); @@ -29,11 +25,9 @@ GLFWwindow *init() { int is_ok = 0; is_ok = gladLoadGLLoader((GLADloadproc)glfwGetProcAddress); assert(is_ok && "Failed to init glad"); - glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); glViewport(0, 0, 800, 600); glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); - glfwSetCursorPosCallback(window, mouse_callback); return window; } @@ -56,10 +50,11 @@ unsigned int meshInit() { int main(void) { glm::vec3 lightPos = glm::vec3(1, 2.0f, 1); + glm::vec3 cameraPos = glm::vec3(2.3, 3, 5); glm::vec3 lightColor = glm::vec3(1); GLFWwindow *window = init(); - Camera *cam = new Camera(glm::vec3(0), 0, 0, 45, 800.0 / 600); + Camera *cam = new Camera(cameraPos, -115.0f, -25.0f, 45, 800.0 / 600); glfwSetWindowUserPointer(window, cam); Shader *cubeShader = new Shader("./shaders/lighting/Vert.glsl", @@ -77,12 +72,7 @@ int main(void) { light->setScale(glm::vec3(.3)); glEnable(GL_DEPTH_TEST); - float lastFrame = 0; while (!glfwWindowShouldClose(window)) { - float currentFrame = static_cast(glfwGetTime()); - deltaTime = currentFrame - lastFrame; - lastFrame = currentFrame; - glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -93,15 +83,12 @@ int main(void) { s->setVec3("lightPos", lightPos); s->setVec3("viewPos", glm::vec3(0.0, 0.0, 5.0)); - s->setVec3("light.ambient", glm::vec3(0.2)); - s->setVec3("light.diffuse", glm::vec3(0.5)); - s->setVec3("light.specular", glm::vec3(1)); - s->setVec3("light.position", lightPos); - - s->setVec3("material.ambient", glm::vec3(1.0, 0.5, 0.31)); - s->setVec3("material.diffuse", glm::vec3(1.0, 0.5, 0.31)); - s->setVec3("material.specular", glm::vec3(0.5)); - s->setFloat("material.shininess", 32); + /*mat taken from*/ + /*http://devernay.free.fr/cours/opengl/materials.html*/ + s->setVec3("material.ambient", glm::vec3(0.24725, 0.1995, 0.0745)); + s->setVec3("material.diffuse", glm::vec3(0.75164, 0.60648, 0.22648)); + s->setVec3("material.specular", glm::vec3(0.628281, 0.555802, 0.366065)); + s->setFloat("material.shininess", 0.4 * 128); cube->draw(cam); s = light->getShader(); @@ -111,9 +98,7 @@ int main(void) { glfwSwapBuffers(window); glfwPollEvents(); - glm::vec3 mov = processInput(window); - mov *= deltaTime; - cam->addFPos(mov); + processInput(window); } delete cam; @@ -123,26 +108,9 @@ int main(void) { return 0; } -glm::vec3 processInput(GLFWwindow *window) { - glm::vec3 mov = glm::vec3(0); +void processInput(GLFWwindow *window) { if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) glfwSetWindowShouldClose(window, true); - - if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS) - mov += glm::vec3(1, 0, 0); - if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS) - mov -= glm::vec3(1, 0, 0); - if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS) - mov += glm::vec3(0, 0, 1); - if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS) - mov -= glm::vec3(0, 0, 1); - if (glfwGetKey(window, GLFW_KEY_Q) == GLFW_PRESS) - mov += glm::vec3(0, 1, 0); - if (glfwGetKey(window, GLFW_KEY_E) == GLFW_PRESS) - mov -= glm::vec3(0, 1, 0); - - mov *= 5; - return mov; } void framebuffer_size_callback(GLFWwindow *window, int width, int height) { @@ -152,20 +120,3 @@ void framebuffer_size_callback(GLFWwindow *window, int width, int height) { if (cam) cam->aspect = (float)width / height; } - -void mouse_callback(GLFWwindow *window, double xpos, double ypos) { - static float xprev = 0.0, yprev = 0.0; - - float xchange = xpos - xprev; - float ychange = yprev - ypos; - xprev = xpos; - yprev = ypos; - - float sensitivity = 0.1f; - xchange *= sensitivity; - ychange *= sensitivity; - - Camera *cam = (Camera *)glfwGetWindowUserPointer(window); - if (cam) - cam->addRotate(xchange, ychange); -}