X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=camera.h;h=7aa1b14a92eb6b29f03338765587b3afe07dd949;hb=304647a7672165dd35ffe54884ed9aedcc9bf363;hp=c1744d86f23f556deaad3f4e7c2bfc55a8f122ea;hpb=22f62f001f21d1b91fefd9fc495c122d9ddf205a;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/camera.h b/camera.h index c1744d8..7aa1b14 100644 --- a/camera.h +++ b/camera.h @@ -1,7 +1,5 @@ -#ifndef CAMERA_H -#define CAMERA_H - -#include "skaterift.h" +#pragma once +#if 0 typedef struct camera camera; struct camera{ @@ -29,11 +27,10 @@ static void camera_lerp_angles( v3f a, v3f b, float t, v3f d ){ d[2] = vg_lerpf( a[2], b[2], t ); } +/* lerp position, fov, and angles */ static void camera_lerp( camera *a, camera *b, float t, camera *d ){ v3_lerp( a->pos, b->pos, t, d->pos ); - d->angles[0] = vg_alerpf( a->angles[0], b->angles[0], t ); - d->angles[1] = vg_lerpf( a->angles[1], b->angles[1], t ); - d->angles[2] = vg_lerpf( a->angles[2], b->angles[2], t ); + camera_lerp_angles( a->angles, b->angles, t, d->angles ); d->fov = vg_lerpf( a->fov, b->fov, t ); } @@ -43,6 +40,16 @@ static void camera_copy( camera *a, camera *d ){ d->fov = a->fov; } +static void m4x3_transform_camera( m4x3f m, camera *cam ){ + m4x3_mulv( m, cam->pos, cam->pos ); + + v3f v0; + v3_angles_vector( cam->angles, v0 ); + m3x3_mulv( m, v0, v0 ); + v3_normalize( v0 ); + v3_angles( v0, cam->angles ); +} + /* * 1) [angles, pos] -> transform */ @@ -86,37 +93,4 @@ static void camera_finalize( camera *cam ) m4x4_copy( cam->mtx.pv, cam->mtx_prev.pv ); m4x4_mul( cam->mtx.p, cam->mtx.v, cam->mtx.pv ); } - -/* - * http://www.terathon.com/lengyel/Lengyel-Oblique.pdf - */ -static void m4x4_clip_projection( m4x4f mat, v4f plane ) -{ - v4f c = - { - (vg_signf(plane[0]) + mat[2][0]) / mat[0][0], - (vg_signf(plane[1]) + mat[2][1]) / mat[1][1], - -1.0f, - (1.0f + mat[2][2]) / mat[3][2] - }; - - v4_muls( plane, 2.0f / v4_dot(plane,c), c ); - - mat[0][2] = c[0]; - mat[1][2] = c[1]; - mat[2][2] = c[2] + 1.0f; - mat[3][2] = c[3]; -} - -/* - * Undoes the above operation - */ -static void m4x4_reset_clipping( m4x4f mat, float ffar, float fnear ) -{ - mat[0][2] = 0.0f; - mat[1][2] = 0.0f; - mat[2][2] = -(ffar + fnear) / (ffar - fnear); - mat[3][2] = -2.0f * ffar * fnear / (ffar - fnear); -} - -#endif /* CAMERA_H */ +#endif