aboutsummaryrefslogtreecommitdiff
path: root/examples/fpscam/clip.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/fpscam/clip.c')
-rw-r--r--examples/fpscam/clip.c108
1 files changed, 0 insertions, 108 deletions
diff --git a/examples/fpscam/clip.c b/examples/fpscam/clip.c
deleted file mode 100644
index 7f2b780..0000000
--- a/examples/fpscam/clip.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Polygon clip detection code
- *
- * The polygon clipping logic is based on the Cohen-Sutherland algorithm, but
- * only the off-screen detection logic is used to determine which polygon edges
- * are off-screen.
- *
- * In tri_clip, the following edges are checked as follows:
- *
- * |\
- * | \
- * | \
- * | \
- * |--------
- *
- * In quad_clip, the following edges are checked as follows:
- *
- * |---------|
- * | \ / |
- * | \ / |
- * | / \ |
- * | / \ |
- * |---------|
- *
- * The inner portion of the quad is checked, otherwise the quad will be
- * culled out if the camera faces right into it, where all four edges
- * are off-screen at once.
- *
- */
-
-#include "clip.h"
-
-#define CLIP_LEFT 1
-#define CLIP_RIGHT 2
-#define CLIP_TOP 4
-#define CLIP_BOTTOM 8
-
-int test_clip(RECT *clip, short x, short y) {
-
- // Tests which corners of the screen a point lies outside of
-
- int result = 0;
-
- if ( x < clip->x ) {
- result |= CLIP_LEFT;
- }
-
- if ( x >= (clip->x+(clip->w-1)) ) {
- result |= CLIP_RIGHT;
- }
-
- if ( y < clip->y ) {
- result |= CLIP_TOP;
- }
-
- if ( y >= (clip->y+(clip->h-1)) ) {
- result |= CLIP_BOTTOM;
- }
-
- return result;
-
-}
-
-int tri_clip(RECT *clip, DVECTOR *v0, DVECTOR *v1, DVECTOR *v2) {
-
- // Returns non-zero if a triangle is outside the screen boundaries
-
- short c[3];
-
- c[0] = test_clip(clip, v0->vx, v0->vy);
- c[1] = test_clip(clip, v1->vx, v1->vy);
- c[2] = test_clip(clip, v2->vx, v2->vy);
-
- if ( ( c[0] & c[1] ) == 0 )
- return 0;
- if ( ( c[1] & c[2] ) == 0 )
- return 0;
- if ( ( c[2] & c[0] ) == 0 )
- return 0;
-
- return 1;
-}
-
-int quad_clip(RECT *clip, DVECTOR *v0, DVECTOR *v1, DVECTOR *v2, DVECTOR *v3) {
-
- // Returns non-zero if a quad is outside the screen boundaries
-
- short c[4];
-
- c[0] = test_clip(clip, v0->vx, v0->vy);
- c[1] = test_clip(clip, v1->vx, v1->vy);
- c[2] = test_clip(clip, v2->vx, v2->vy);
- c[3] = test_clip(clip, v3->vx, v3->vy);
-
- if ( ( c[0] & c[1] ) == 0 )
- return 0;
- if ( ( c[1] & c[2] ) == 0 )
- return 0;
- if ( ( c[2] & c[3] ) == 0 )
- return 0;
- if ( ( c[3] & c[0] ) == 0 )
- return 0;
- if ( ( c[0] & c[2] ) == 0 )
- return 0;
- if ( ( c[1] & c[3] ) == 0 )
- return 0;
-
- return 1;
-} \ No newline at end of file