X-Git-Url: https://harrygodden.com/git/?p=vg.git;a=blobdiff_plain;f=labs%2Fphysics.c;fp=labs%2Fphysics.c;h=e741f12568184f72924fdf1fd3db8de60f878233;hp=0000000000000000000000000000000000000000;hb=1c305409e8eca9cf8449d681df73208956ce14df;hpb=1abb54856257b10f6a20a4980a31930c59e3d37c diff --git a/labs/physics.c b/labs/physics.c new file mode 100644 index 0000000..e741f12 --- /dev/null +++ b/labs/physics.c @@ -0,0 +1,105 @@ +#define VG_GAME +#define VG_AUDIO_FORCE_COMPRESSED +#define VG_3D +#define VG_LOG_SOURCE_INFO +#define VG_TIMESTEP_FIXED (1.0/60.0) + +#ifndef VG_RELEASE + #define VG_DEVWINDOW +#endif + +#define SDL_MAIN_HANDLED + +#include "vg/vg.h" +#include "vg/vg_camera.h" + +int main( int argc, char *argv[] ){ + vg_mem.use_libc_malloc = 0; + vg_set_mem_quota( 80*1024*1024 ); + vg_enter( argc, argv, "Voyager Game Engine" ); + return 0; +} + +static void vg_launch_opt(void){ + const char *arg; +} + +static void vg_preload(void){ + vg_audio.dsp_enabled = 0; +} + +static void vg_load(void){ + vg_bake_shaders(); +} + +static void vg_pre_update(void){ +} + +static void vg_fixed_update(void){ +} + +static void vg_post_update(void){ +} + +static void vg_framebuffer_resize( int w, int h ){ +} + +static void draw_origin_axis(void){ + vg_line( (v3f){ 0.0f, 0.0f, 0.0f }, (v3f){ 1.0f, 0.0f, 0.0f }, 0xffff0000 ); + vg_line( (v3f){ 0.0f, 0.0f, 0.0f }, (v3f){ 0.0f, 1.0f, 0.0f }, 0xff00ff00 ); + vg_line( (v3f){ 0.0f, 0.0f, 0.0f }, (v3f){ 0.0f, 0.0f, 1.0f }, 0xff0000ff ); +} + +static void vg_render(void){ + glBindFramebuffer( GL_FRAMEBUFFER, 0 ); + glViewport( 0,0, vg.window_x, vg.window_y ); + glEnable( GL_DEPTH_TEST ); + glDisable( GL_BLEND ); + + glClearColor( 0.05f, 0.05f, 0.05f, 1.0f ); + glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); + + f32 x = -((f32)vg.mouse_pos[0] / (f32)vg.window_x) * VG_TAUf, + y = (((f32)vg.mouse_pos[1] / (f32)vg.window_y) - 0.5f)*VG_PIf; + + f32 t = vg.time * 0.1f * VG_TAUf; + + vg_camera cam = { + .angles = { -x, y, 0 }, + .nearz = 0.01f, + .farz = 500.0f, + .fov = 90.0f, + .pos = { sinf(x)*10.0f*cosf(y), + sinf(y)*10.0f, + cosf(x)*10.0f*cosf(y) }, + }; + + vg_camera_update_transform( &cam ); + vg_camera_update_view( &cam ); + vg_camera_update_projection( &cam ); + vg_camera_finalize( &cam ); + m4x4_copy( cam.mtx.pv, vg.pv ); + + m4x3f mdl; + m4x3_identity( mdl ); + + vg_rb_view_bind(); + vg_rb_view_capsule( mdl, (sinf(t*0.2f)*0.5f+0.55f)*2.0f, + (sinf(t*0.33f)*0.5f+0.55f)*1.0f, + (v4f){1,0,0,1} ); + vg_rb_view_box( mdl, (boxf){{-4.999,-2.001,-4.999},{4.999,-0.999,4.999}}, + (v4f){0.8f,0.8f,0.8f,1} ); + + mdl[3][0] = sinf(t)*2.0f; + mdl[3][2] = cosf(t)*2.0f; + vg_rb_view_sphere( mdl, 1, (v4f){0,1,0,1} ); + + draw_origin_axis(); + vg_lines_drawall(); + + glDisable(GL_DEPTH_TEST); +} + +static void vg_gui(void){ + vg_ui.wants_mouse = 1; +}