Add compile script and make the triangle move based off of a Matrix 4
This commit is contained in:
parent
56cf609849
commit
d10cb1cdc5
13
compile
Executable file
13
compile
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ "$1" = "--clean" ]; then
|
||||||
|
echo "Cleaning build directory..."
|
||||||
|
rm -rf build/*
|
||||||
|
fi
|
||||||
|
|
||||||
|
(
|
||||||
|
cd build || exit 1
|
||||||
|
cmake ..
|
||||||
|
make
|
||||||
|
)
|
||||||
|
|
||||||
22
src/main.cpp
22
src/main.cpp
@ -3,6 +3,9 @@
|
|||||||
#include <GL/glew.h>
|
#include <GL/glew.h>
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <glm/glm.hpp>
|
||||||
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
|
#include <glm/gtc/type_ptr.hpp>
|
||||||
|
|
||||||
// Window dimensions
|
// Window dimensions
|
||||||
const GLint WIDTH = 800, HEIGHT = 600;
|
const GLint WIDTH = 800, HEIGHT = 600;
|
||||||
@ -13,10 +16,10 @@ static const char *vertex_shader = " \n\
|
|||||||
\n\
|
\n\
|
||||||
layout (location = 0) in vec3 pos; \n\
|
layout (location = 0) in vec3 pos; \n\
|
||||||
\n\
|
\n\
|
||||||
uniform float x_move; \n\
|
uniform mat4 model; \n\
|
||||||
\n\
|
\n\
|
||||||
void main() { \n\
|
void main() { \n\
|
||||||
gl_Position = vec4(pos.x + x_move, pos.y, pos.z, 1.0); \n\
|
gl_Position = model * vec4(pos.x, pos.y, pos.z, 1.0); \n\
|
||||||
}";
|
}";
|
||||||
|
|
||||||
// Fragment shader
|
// Fragment shader
|
||||||
@ -54,7 +57,7 @@ bool add_shader(GLuint *program, const char *shader_code, GLenum shader_type) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool compile_shaders(GLuint *shader_program, GLuint *x_move) {
|
bool compile_shaders(GLuint *shader_program, GLuint *uniform_model) {
|
||||||
*shader_program = glCreateProgram();
|
*shader_program = glCreateProgram();
|
||||||
|
|
||||||
if (!shader_program) {
|
if (!shader_program) {
|
||||||
@ -86,7 +89,7 @@ bool compile_shaders(GLuint *shader_program, GLuint *x_move) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
*x_move = glGetUniformLocation(*shader_program, "x_move");
|
*uniform_model = glGetUniformLocation(*shader_program, "model");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -114,11 +117,11 @@ void create_triangle(GLuint *VAO, GLuint *VBO) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
GLuint VAO, VBO, shader_program, x_move;
|
GLuint VAO, VBO, shader_program, uniform_model;
|
||||||
bool direction = true;
|
bool direction = true;
|
||||||
float tri_offset = 0.0f;
|
float tri_offset = 0.0f;
|
||||||
float tri_max_offset = 0.7f;
|
float tri_max_offset = 0.7f;
|
||||||
float tri_increment = 0.005f;
|
float tri_increment = 0.05f;
|
||||||
|
|
||||||
// Initialize GLFW
|
// Initialize GLFW
|
||||||
glfwInitHint(GLFW_PLATFORM, GLFW_PLATFORM_WAYLAND);
|
glfwInitHint(GLFW_PLATFORM, GLFW_PLATFORM_WAYLAND);
|
||||||
@ -177,7 +180,7 @@ int main() {
|
|||||||
|
|
||||||
// Create our triangle
|
// Create our triangle
|
||||||
create_triangle(&VAO, &VBO);
|
create_triangle(&VAO, &VBO);
|
||||||
compile_shaders(&shader_program, &x_move);
|
compile_shaders(&shader_program, &uniform_model);
|
||||||
|
|
||||||
// Loop until window is closed
|
// Loop until window is closed
|
||||||
while (!glfwWindowShouldClose(window)) {
|
while (!glfwWindowShouldClose(window)) {
|
||||||
@ -200,7 +203,10 @@ int main() {
|
|||||||
|
|
||||||
glUseProgram(shader_program);
|
glUseProgram(shader_program);
|
||||||
|
|
||||||
glUniform1f(x_move, tri_offset);
|
glm::mat4 model = glm::mat4(1.0f);
|
||||||
|
model = glm::translate(model, glm::vec3(tri_offset, 0.0f, 0.0f));
|
||||||
|
|
||||||
|
glUniformMatrix4fv(uniform_model, 1, GL_FALSE, glm::value_ptr(model));
|
||||||
|
|
||||||
glBindVertexArray(VAO);
|
glBindVertexArray(VAO);
|
||||||
glDrawArrays(GL_TRIANGLES, 0, 3);
|
glDrawArrays(GL_TRIANGLES, 0, 3);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user