Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  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. //-----------------------------------------------------------------------------
  101.