1 // Copyright (C) 2021 Harry Godden (hgn) - All Rights Reserved
6 SHADER_DEFINE( colour_shader
,
9 "layout (location=0) in vec3 a_co;"
15 " vec4 vert_pos = uPv * uMdl * vec4( a_co, 1.0 );"
16 " gl_Position = vert_pos;"
21 "uniform vec4 uColour;"
25 " FragColor = uColour;"
28 UNIFORMS({ "uPv", "uMdl", "uColour" })
36 int main( int argc
, char *argv
[] )
38 vg_init( argc
, argv
, "FishLadder" );
44 float ratio
= (float)vg_window_y
/ (float)vg_window_x
;
45 float const size
= 7.5f
;
46 glm_ortho( -size
, size
, -size
*ratio
, size
*ratio
, 0.1f
, 100.f
, m_projection
);
48 glm_mat4_identity( m_view
);
49 glm_translate_z( m_view
, -10.f
);
50 glm_rotate_x( m_view
, -1.0f
, m_view
);
52 glm_mat4_mul( m_projection
, m_view
, m_pv
);
59 vec4 vp
= { 0.f
, 0.f
, vg_window_x
, vg_window_y
};
60 glm_mat4_inv( m_pv
, pv_inverse
);
61 glm_unprojecti( (vec3
){ vg_mouse_x
, vg_window_y
-vg_mouse_y
, -1.f
}, pv_inverse
, vp
, ray_dir
);
62 glm_unprojecti( (vec3
){ vg_mouse_x
, vg_window_y
-vg_mouse_y
, 0.f
}, pv_inverse
, vp
, ray_origin
);
63 glm_vec3_sub( ray_dir
, ray_origin
, ray_dir
);
65 // Get floor tile intersection
66 float ray_t
= -ray_origin
[1] / ray_dir
[1];
69 glm_vec3_copy( ray_origin
, tile_pos
);
70 glm_vec3_muladds( ray_dir
, ray_t
, tile_pos
);
72 tile_pos
[0] = floorf( tile_pos
[0] + 0.5f
);
73 tile_pos
[2] = floorf( tile_pos
[2] + 0.5f
);
75 glm_mat4_identity( m_mdl
);
76 glm_translate( m_mdl
, tile_pos
);
84 glViewport( 0,0, vg_window_x
, vg_window_y
);
86 glEnable( GL_DEPTH_TEST
);
87 glClearColor( 0.94f
, 0.94f
, 0.94f
, 1.0f
);
88 glClear( GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
90 SHADER_USE( colour_shader
);
91 glUniformMatrix4fv( SHADER_UNIFORM( colour_shader
, "uPv" ), 1, GL_FALSE
, (float *)m_pv
);
92 glUniform4f( SHADER_UNIFORM( colour_shader
, "uColour" ), 0.5f
, 0.5f
, 0.5f
, 1.0f
);
94 glUniformMatrix4fv( SHADER_UNIFORM( colour_shader
, "uMdl" ), 1, GL_FALSE
, (float *)m_mdl
);
96 glBindVertexArray( tile_vao
);
97 glDrawArrays( GL_TRIANGLES
, 0, 6 );
102 SHADER_INIT( colour_shader
);
104 glGenVertexArrays( 1, &tile_vao
);
105 glGenBuffers( 1, &tile_vbo
);
117 glBindVertexArray( tile_vao
);
118 glBindBuffer( GL_ARRAY_BUFFER
, tile_vbo
);
127 glVertexAttribPointer( 0, 3, GL_FLOAT
, GL_FALSE
, 3 * sizeof(float), (void*)0 );
128 glEnableVertexAttribArray( 0 );