From f211508e157205f7bf22fb50d49903e29fd828d5 Mon Sep 17 00:00:00 2001 From: MrFloor Date: Tue, 1 Feb 2022 21:44:13 +0100 Subject: [PATCH] Transformation matrices --- assets/shaders/fragment4.glsl | 11 +++++++++++ assets/shaders/vertex4.glsl | 15 +++++++++++++++ src/Input.c | 31 +++++++++++++++++++++++++++++++ src/Input.h | 1 + src/main.c | 17 +++++++++++++++-- 5 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 assets/shaders/fragment4.glsl create mode 100644 assets/shaders/vertex4.glsl diff --git a/assets/shaders/fragment4.glsl b/assets/shaders/fragment4.glsl new file mode 100644 index 0000000..fce1978 --- /dev/null +++ b/assets/shaders/fragment4.glsl @@ -0,0 +1,11 @@ +#version 330 core +out vec4 FragColor; + +in vec3 ourColor; +in vec2 TextureCords; + +uniform sampler2D Texture; + +void main() { + FragColor = texture(Texture, TextureCords) * vec4(ourColor, 1.0); +} diff --git a/assets/shaders/vertex4.glsl b/assets/shaders/vertex4.glsl new file mode 100644 index 0000000..ba7e9a1 --- /dev/null +++ b/assets/shaders/vertex4.glsl @@ -0,0 +1,15 @@ +#version 330 core +layout (location =0 ) in vec3 aPos; +layout (location = 1) in vec3 aColor; +layout (location = 2) in vec2 aTextureCords; + +out vec3 ourColor; +out vec2 TextureCords; + +uniform mat4 transform; + +void main() { + gl_Position = transform * vec4(aPos, 1.0); + ourColor = aColor; + TextureCords = aTextureCords; +} diff --git a/src/Input.c b/src/Input.c index 9c4c79a..db0cf5f 100644 --- a/src/Input.c +++ b/src/Input.c @@ -1,5 +1,15 @@ #include "Input.h" +extern float pos[3]; + +/* 0: escape + * 1: W + * 2: S + * 3: + */ + +static bool pressed[5]; + void key_pressed(GLFWwindow* window, int key, int scancode, int action, int mods){ if ( key == GLFW_KEY_ESCAPE && action == GLFW_PRESS){ glfwSetWindowShouldClose(window, true); @@ -7,5 +17,26 @@ void key_pressed(GLFWwindow* window, int key, int scancode, int action, int mods if ( key == GLFW_KEY_Q && action == GLFW_PRESS ){ glfwSetWindowShouldClose(window, true); } + if ( key == GLFW_KEY_W && action == GLFW_PRESS ){ + pressed[1] = true; + } + if ( key == GLFW_KEY_W && action == GLFW_RELEASE ){ + pressed[1] = false; + } + if ( key == GLFW_KEY_S && action == GLFW_PRESS ){ + pressed[2] = true; + } + if ( key == GLFW_KEY_S && action == GLFW_RELEASE ) { + pressed[2] = false; + } } + +void processInput(){ + if (pressed[1] == true){ + pos[1] += 0.01f; + } + if (pressed[2] == true){ + pos[1] -= 0.01f; + } +} diff --git a/src/Input.h b/src/Input.h index 13f4cef..564cf64 100644 --- a/src/Input.h +++ b/src/Input.h @@ -8,5 +8,6 @@ void key_pressed(); +void processInput(); #endif diff --git a/src/main.c b/src/main.c index cdbc367..c8b79ab 100644 --- a/src/main.c +++ b/src/main.c @@ -9,6 +9,9 @@ #include "Input.h" + +float pos[3] = {0.0f, 0.0f, 0.0f}; + int main() { GLFWwindow* window; window = initOpenGL(); @@ -23,8 +26,8 @@ int main() { }; // CreateShader - char* vertex1 = "../assets/shaders/vertex3.glsl\0"; - char* fragment1 = "../assets/shaders/fragment3.glsl\0"; + char* vertex1 = "../assets/shaders/vertex4.glsl\0"; + char* fragment1 = "../assets/shaders/fragment4.glsl\0"; unsigned int shader1; shader1 = createShader(vertex1, fragment1); @@ -49,6 +52,7 @@ int main() { unsigned int texture; texture = createTexture("../assets/textures/wall.jpg"); + while(!glfwWindowShouldClose(window)) { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); @@ -58,10 +62,19 @@ int main() { glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture); glBindVertexArray(VAO); + + mat4x4 transform; + mat4x4_identity(transform); + mat4x4_translate(transform, pos[0], pos[1], pos[2]); + + unsigned int transformLoc = glGetUniformLocation(shader1, "transform"); + glUniformMatrix4fv(transformLoc, 1, GL_FALSE, *transform); + glDrawArrays(GL_TRIANGLES, 0, 3); glfwSwapBuffers(window); glfwPollEvents(); + processInput(); } glDeleteVertexArrays(1, &VAO);