rigidbody view
[vg.git] / labs / physics.c
diff --git a/labs/physics.c b/labs/physics.c
new file mode 100644 (file)
index 0000000..e741f12
--- /dev/null
@@ -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;
+}