|
|
1.1 ! root 1: // Emacs style mode select -*- C++ -*- ! 2: //----------------------------------------------------------------------------- ! 3: // ! 4: // $Id:$ ! 5: // ! 6: // Copyright (C) 1993-1996 by id Software, Inc. ! 7: // ! 8: // This source is available for distribution and/or modification ! 9: // only under the terms of the DOOM Source Code License as ! 10: // published by id Software. All rights reserved. ! 11: // ! 12: // The source is distributed in the hope that it will be useful, ! 13: // but WITHOUT ANY WARRANTY; without even the implied warranty of ! 14: // FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License ! 15: // for more details. ! 16: // ! 17: // DESCRIPTION: ! 18: // Lookup tables. ! 19: // Do not try to look them up :-). ! 20: // In the order of appearance: ! 21: // ! 22: // int finetangent[4096] - Tangens LUT. ! 23: // Should work with BAM fairly well (12 of 16bit, ! 24: // effectively, by shifting). ! 25: // ! 26: // int finesine[10240] - Sine lookup. ! 27: // Guess what, serves as cosine, too. ! 28: // Remarkable thing is, how to use BAMs with this? ! 29: // ! 30: // int tantoangle[2049] - ArcTan LUT, ! 31: // maps tan(angle) to angle fast. Gotta search. ! 32: // ! 33: //----------------------------------------------------------------------------- ! 34: ! 35: ! 36: #ifndef __TABLES__ ! 37: #define __TABLES__ ! 38: ! 39: ! 40: ! 41: #ifdef LINUX ! 42: #include <math.h> ! 43: #else ! 44: #define PI 3.141592657 ! 45: #endif ! 46: ! 47: ! 48: #include "m_fixed.h" ! 49: ! 50: #define FINEANGLES 8192 ! 51: #define FINEMASK (FINEANGLES-1) ! 52: ! 53: ! 54: // 0x100000000 to 0x2000 ! 55: #define ANGLETOFINESHIFT 19 ! 56: ! 57: // Effective size is 10240. ! 58: extern fixed_t finesine[5*FINEANGLES/4]; ! 59: ! 60: // Re-use data, is just PI/2 pahse shift. ! 61: extern fixed_t* finecosine; ! 62: ! 63: ! 64: // Effective size is 4096. ! 65: extern fixed_t finetangent[FINEANGLES/2]; ! 66: ! 67: // Binary Angle Measument, BAM. ! 68: #define ANG45 0x20000000 ! 69: #define ANG90 0x40000000 ! 70: #define ANG180 0x80000000 ! 71: #define ANG270 0xc0000000 ! 72: ! 73: ! 74: #define SLOPERANGE 2048 ! 75: #define SLOPEBITS 11 ! 76: #define DBITS (FRACBITS-SLOPEBITS) ! 77: ! 78: typedef unsigned angle_t; ! 79: ! 80: ! 81: // Effective size is 2049; ! 82: // The +1 size is to handle the case when x==y ! 83: // without additional checking. ! 84: extern angle_t tantoangle[SLOPERANGE+1]; ! 85: ! 86: ! 87: // Utility function, ! 88: // called by R_PointToAngle. ! 89: int ! 90: SlopeDiv ! 91: ( unsigned num, ! 92: unsigned den); ! 93: ! 94: ! 95: #endif ! 96: //----------------------------------------------------------------------------- ! 97: // ! 98: // $Log:$ ! 99: // ! 100: //-----------------------------------------------------------------------------
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.