Got projection and view matrices working
This commit is contained in:
parent
6f93d55f6c
commit
e2b1d027d8
|
@ -7,6 +7,7 @@ SDL_Window *window = NULL;
|
||||||
SDL_GLContext gl_context;
|
SDL_GLContext gl_context;
|
||||||
int main_shader = 0;
|
int main_shader = 0;
|
||||||
mat4x4 projection_matrix;
|
mat4x4 projection_matrix;
|
||||||
|
mat4x4 view_matrix;
|
||||||
|
|
||||||
float triangle_vertices[9] = {
|
float triangle_vertices[9] = {
|
||||||
0.0f, 0.0f, -1.0f,
|
0.0f, 0.0f, -1.0f,
|
||||||
|
@ -22,6 +23,9 @@ typedef struct tc_vec3
|
||||||
|
|
||||||
} tc_vec3_s;
|
} tc_vec3_s;
|
||||||
|
|
||||||
|
tc_vec3_s tc_camera_position = { 0.0f, 0.0f, 0.0f };
|
||||||
|
tc_vec3_s tc_camera_rotation = { 0.0f, 0.0f, 0.0f };
|
||||||
|
|
||||||
typedef struct tc_object
|
typedef struct tc_object
|
||||||
{
|
{
|
||||||
int vbo;
|
int vbo;
|
||||||
|
@ -149,16 +153,156 @@ void render()
|
||||||
float color[4] = { 0.0f, 1.0f, 0.0f, 1.0f };
|
float color[4] = { 0.0f, 1.0f, 0.0f, 1.0f };
|
||||||
glClearBufferfv(GL_COLOR, 0, color);
|
glClearBufferfv(GL_COLOR, 0, color);
|
||||||
|
|
||||||
|
mat4x4_perspective(projection_matrix, 120, 1200 / 800, 0.0001f, 1000.0f);
|
||||||
|
mat4x4_translate(view_matrix, -tc_camera_position.x, -tc_camera_position.y, tc_camera_position.z);
|
||||||
|
|
||||||
glUseProgram(main_shader);
|
glUseProgram(main_shader);
|
||||||
|
|
||||||
int projection_uniform_location = glGetUniformLocation(main_shader, "projection_matrix");
|
int projection_uniform_location = glGetUniformLocation(main_shader, "projection_matrix");
|
||||||
printf("%d\n", projection_uniform_location);
|
|
||||||
glUniformMatrix4fv(projection_uniform_location, 1, GL_FALSE, &projection_matrix[0][0]);
|
glUniformMatrix4fv(projection_uniform_location, 1, GL_FALSE, &projection_matrix[0][0]);
|
||||||
|
|
||||||
|
int view_uniform_location = glGetUniformLocation(main_shader, "view_matrix");
|
||||||
|
glUniformMatrix4fv(view_uniform_location, 1, GL_FALSE, &view_matrix[0][0]);
|
||||||
|
// printf("%d\n", view_uniform_location);
|
||||||
|
|
||||||
|
// mat4x4_rotate_X(view_matrix, view_matrix, tc_camera_rotation.x);
|
||||||
|
// mat4x4_rotate_Y(view_matrix, view_matrix, tc_camera_rotation.y);
|
||||||
|
// mat4x4_rotate_Z(view_matrix, view_matrix, tc_camera_rotation.z);
|
||||||
|
|
||||||
render_block(block);
|
render_block(block);
|
||||||
|
|
||||||
SDL_GL_SwapWindow(window);
|
SDL_GL_SwapWindow(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool shift_pressed = false;
|
||||||
|
bool go_up = false;
|
||||||
|
bool go_left = false;
|
||||||
|
bool go_right = false;
|
||||||
|
bool go_forward = false;
|
||||||
|
bool go_backwards = false;
|
||||||
|
|
||||||
|
bool update()
|
||||||
|
{
|
||||||
|
|
||||||
|
SDL_Event event;
|
||||||
|
while(SDL_PollEvent(&event))
|
||||||
|
{
|
||||||
|
switch(event.type)
|
||||||
|
{
|
||||||
|
case SDL_QUIT:
|
||||||
|
SDL_HideWindow(window);
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDL_WINDOWEVENT:
|
||||||
|
{
|
||||||
|
if(event.window.event == SDL_WINDOWEVENT_RESIZED)
|
||||||
|
{
|
||||||
|
puts("RESIZED");
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case SDL_KEYDOWN:
|
||||||
|
|
||||||
|
if(event.key.keysym.scancode == SDL_SCANCODE_W)
|
||||||
|
{
|
||||||
|
go_forward = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(event.key.keysym.scancode == SDL_SCANCODE_S)
|
||||||
|
{
|
||||||
|
go_backwards = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(event.key.keysym.scancode == SDL_SCANCODE_A)
|
||||||
|
{
|
||||||
|
go_left = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(event.key.keysym.scancode == SDL_SCANCODE_D)
|
||||||
|
{
|
||||||
|
go_right = true;;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(event.key.keysym.scancode == SDL_SCANCODE_SPACE)
|
||||||
|
{
|
||||||
|
go_up = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(event.key.keysym.scancode == SDL_SCANCODE_LSHIFT)
|
||||||
|
{
|
||||||
|
shift_pressed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDL_KEYUP:
|
||||||
|
|
||||||
|
if(event.key.keysym.scancode == SDL_SCANCODE_W)
|
||||||
|
{
|
||||||
|
go_forward = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(event.key.keysym.scancode == SDL_SCANCODE_S)
|
||||||
|
{
|
||||||
|
go_backwards = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(event.key.keysym.scancode == SDL_SCANCODE_A)
|
||||||
|
{
|
||||||
|
go_left = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(event.key.keysym.scancode == SDL_SCANCODE_D)
|
||||||
|
{
|
||||||
|
go_right = false;;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(event.key.keysym.scancode == SDL_SCANCODE_SPACE)
|
||||||
|
{
|
||||||
|
go_up = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(event.key.keysym.scancode == SDL_SCANCODE_LSHIFT)
|
||||||
|
{
|
||||||
|
shift_pressed = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(shift_pressed)
|
||||||
|
{
|
||||||
|
tc_camera_position.y -= 0.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(go_up)
|
||||||
|
{
|
||||||
|
tc_camera_position.y += 0.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(go_left)
|
||||||
|
{
|
||||||
|
tc_camera_position.x -= 0.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(go_right)
|
||||||
|
{
|
||||||
|
tc_camera_position.x += 0.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(go_forward)
|
||||||
|
{
|
||||||
|
tc_camera_position.z += 0.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(go_backwards)
|
||||||
|
{
|
||||||
|
tc_camera_position.z -= 0.25;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
SDL_Init(SDL_INIT_EVERYTHING);
|
SDL_Init(SDL_INIT_EVERYTHING);
|
||||||
|
@ -176,7 +320,6 @@ int main(int argc, char **argv)
|
||||||
gladLoadGLLoader(&SDL_GL_GetProcAddress);
|
gladLoadGLLoader(&SDL_GL_GetProcAddress);
|
||||||
gladLoadGL();
|
gladLoadGL();
|
||||||
|
|
||||||
mat4x4_perspective(projection_matrix, 120, 1200 / 800, 0.0001f, 1000.0f);
|
|
||||||
main_shader = setup_shaders("vertex_shader.glsl", "fragment_shader.glsl");
|
main_shader = setup_shaders("vertex_shader.glsl", "fragment_shader.glsl");
|
||||||
|
|
||||||
block = tc_new_block_at_3f(0.0, 0.0, 0.0);
|
block = tc_new_block_at_3f(0.0, 0.0, 0.0);
|
||||||
|
@ -184,27 +327,10 @@ int main(int argc, char **argv)
|
||||||
int64_t frame_index = 1;
|
int64_t frame_index = 1;
|
||||||
while(frame_index > 0)
|
while(frame_index > 0)
|
||||||
{
|
{
|
||||||
SDL_Event event;
|
if(!update())
|
||||||
while(SDL_PollEvent(&event))
|
|
||||||
{
|
{
|
||||||
switch(event.type)
|
frame_index = -1;
|
||||||
{
|
|
||||||
case SDL_QUIT:
|
|
||||||
SDL_HideWindow(window);
|
|
||||||
frame_index = -1;
|
|
||||||
break;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDL_WINDOWEVENT:
|
|
||||||
{
|
|
||||||
if(event.window.event == SDL_WINDOWEVENT_RESIZED)
|
|
||||||
{
|
|
||||||
puts("RESIZED");
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
render();
|
render();
|
||||||
|
|
||||||
if(frame_index == 1)
|
if(frame_index == 1)
|
||||||
|
|
|
@ -3,9 +3,10 @@
|
||||||
layout(location=0) in vec3 pos;
|
layout(location=0) in vec3 pos;
|
||||||
|
|
||||||
uniform mat4 projection_matrix;
|
uniform mat4 projection_matrix;
|
||||||
|
uniform mat4 view_matrix;
|
||||||
|
uniform mat4 model_matrix;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
|
||||||
gl_Position = vec4(pos, 1.0) * projection_matrix;
|
gl_Position = projection_matrix * view_matrix * vec4(pos, 1.0);
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue