diff --git a/src/r_main.cpp b/src/r_main.cpp index 0249544eb..072b03887 100644 --- a/src/r_main.cpp +++ b/src/r_main.cpp @@ -221,7 +221,6 @@ void R_InitTextureMapping () const int t1 = MAX(int(CenterX - FocalLengthX), 0); const int t2 = MIN(int(CenterX + FocalLengthX), viewwidth); - const fixed_t dfocus = FLOAT2FIXED(FocalLengthX) >> DBITS; for (i = 0, x = t2; x >= t1; --x) { @@ -233,7 +232,10 @@ void R_InitTextureMapping () } for (x = t2 + 1; x <= viewwidth; ++x) { - xtoviewangle[x] = ANGLE_270 + tantoangle[dfocus / (x - centerx)]; + double f = atan2((FocalLengthX / (x - centerx)), 1) / (2*M_PI); + xtoviewangle[x] = ANGLE_270 + (angle_t)(0xffffffff * f); + + //xtoviewangle[x] = ANGLE_270 + tantoangle[i]; } for (x = 0; x < t1; ++x) { diff --git a/src/r_utility.cpp b/src/r_utility.cpp index 1dd4e5e40..2374c9eea 100644 --- a/src/r_utility.cpp +++ b/src/r_utility.cpp @@ -158,27 +158,6 @@ DAngle viewpitch; // CODE -------------------------------------------------------------------- static void R_Shutdown (); -//========================================================================== -// -// R_InitPointToAngle -// -//========================================================================== - -void R_InitPointToAngle (void) -{ - double f; - int i; -// -// slope (tangent) to angle lookup -// - for (i = 0; i <= SLOPERANGE; i++) - { - f = g_atan2 ((double)i, (double)SLOPERANGE) / (6.28318530718 /* 2*pi */); - tantoangle[i] = (angle_t)(0xffffffff*f); - } -} - - //========================================================================== // // R_InitTables @@ -188,7 +167,7 @@ void R_InitPointToAngle (void) void R_InitTables (void) { int i; - const double pimul = PI*2/FINEANGLES; + const double pimul = M_PI*2/FINEANGLES; // viewangle tangent table finetangent[0] = (fixed_t)(FRACUNIT*g_tan ((0.5-FINEANGLES/4)*pimul)+0.5); @@ -410,7 +389,6 @@ void R_Init () //R_InitColormaps (); //StartScreen->Progress(); - R_InitPointToAngle (); R_InitTables (); R_InitTranslationTables (); R_SetViewSize (screenblocks); diff --git a/src/tables.cpp b/src/tables.cpp index 9e367d349..9679e8547 100644 --- a/src/tables.cpp +++ b/src/tables.cpp @@ -37,6 +37,4 @@ fixed_t finetangent[4096]; fixed_t finesine[10240]; -angle_t tantoangle[2049]; -cosine_inline finecosine; // in case this is actually needed diff --git a/src/tables.h b/src/tables.h index 085174892..e2cf93e63 100644 --- a/src/tables.h +++ b/src/tables.h @@ -24,11 +24,8 @@ // effectively, by shifting). // // int finesine[10240] - Sine lookup. -// Guess what, serves as cosine, too. // Remarkable thing is, how to use BAMs with this? // -// int tantoangle[2049] - ArcTan LUT, -// maps tan(angle) to angle fast. Gotta search. // //----------------------------------------------------------------------------- @@ -40,72 +37,25 @@ #include #include "basictypes.h" -#ifndef PI -#define PI 3.14159265358979323846 // matches value in gcc v2 math.h -#endif - - -#define FINEANGLEBITS 13 #define FINEANGLES 8192 #define FINEMASK (FINEANGLES-1) // 0x100000000 to 0x2000 #define ANGLETOFINESHIFT 19 -#define BOBTOFINESHIFT (FINEANGLEBITS - 6) - // Effective size is 10240. extern fixed_t finesine[5*FINEANGLES/4]; -// Re-use data, is just PI/2 phase shift. -// [RH] Instead of using a pointer, use some inline code -// (encapsulated in a struct so that we can still use array accesses). -struct cosine_inline -{ - fixed_t operator[] (unsigned int x) const - { - return finesine[x+FINEANGLES/4]; - } -}; -extern cosine_inline finecosine; - // Effective size is 4096. extern fixed_t finetangent[FINEANGLES/2]; // Binary Angle Measument, BAM. -#define ANG45 (0x20000000) -#define ANG90 (0x40000000) -#define ANG180 (0x80000000) -#define ANG270 (0xc0000000) - -#define ANGLE_45 (0x20000000) #define ANGLE_90 (0x40000000) #define ANGLE_180 (0x80000000) #define ANGLE_270 (0xc0000000) #define ANGLE_MAX (0xffffffff) -#define ANGLE_1 (ANGLE_45/45) -#define ANGLE_60 (ANGLE_180/3) -#define SLOPERANGE 2048 -#define SLOPEBITS 11 -#define DBITS (FRACBITS-SLOPEBITS) - typedef uint32 angle_t; -// Previously seen all over the place, code like this: abs(ang1 - ang2) -// Clang warns (and is absolutely correct) that technically, this -// could be optimized away and do nothing: -// warning: taking the absolute value of unsigned type 'unsigned int' has no effect -// note: remove the call to 'abs' since unsigned values cannot be negative -inline angle_t absangle(angle_t a) -{ - return (angle_t)abs((int32_t)a); -} - -// Effective size is 2049; -// The +1 size is to handle the case when x==y -// without additional checking. -extern angle_t tantoangle[SLOPERANGE+1]; - #endif // __TABLES_H__