mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-28 06:53:58 +00:00
- eliminated tantoangle and cleaned up r_tables.h
This commit is contained in:
parent
8171637a57
commit
26f54b0ba4
4 changed files with 5 additions and 77 deletions
|
@ -221,7 +221,6 @@ void R_InitTextureMapping ()
|
||||||
|
|
||||||
const int t1 = MAX(int(CenterX - FocalLengthX), 0);
|
const int t1 = MAX(int(CenterX - FocalLengthX), 0);
|
||||||
const int t2 = MIN(int(CenterX + FocalLengthX), viewwidth);
|
const int t2 = MIN(int(CenterX + FocalLengthX), viewwidth);
|
||||||
const fixed_t dfocus = FLOAT2FIXED(FocalLengthX) >> DBITS;
|
|
||||||
|
|
||||||
for (i = 0, x = t2; x >= t1; --x)
|
for (i = 0, x = t2; x >= t1; --x)
|
||||||
{
|
{
|
||||||
|
@ -233,7 +232,10 @@ void R_InitTextureMapping ()
|
||||||
}
|
}
|
||||||
for (x = t2 + 1; x <= viewwidth; ++x)
|
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)
|
for (x = 0; x < t1; ++x)
|
||||||
{
|
{
|
||||||
|
|
|
@ -158,27 +158,6 @@ DAngle viewpitch;
|
||||||
// CODE --------------------------------------------------------------------
|
// CODE --------------------------------------------------------------------
|
||||||
static void R_Shutdown ();
|
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
|
// R_InitTables
|
||||||
|
@ -188,7 +167,7 @@ void R_InitPointToAngle (void)
|
||||||
void R_InitTables (void)
|
void R_InitTables (void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
const double pimul = PI*2/FINEANGLES;
|
const double pimul = M_PI*2/FINEANGLES;
|
||||||
|
|
||||||
// viewangle tangent table
|
// viewangle tangent table
|
||||||
finetangent[0] = (fixed_t)(FRACUNIT*g_tan ((0.5-FINEANGLES/4)*pimul)+0.5);
|
finetangent[0] = (fixed_t)(FRACUNIT*g_tan ((0.5-FINEANGLES/4)*pimul)+0.5);
|
||||||
|
@ -410,7 +389,6 @@ void R_Init ()
|
||||||
//R_InitColormaps ();
|
//R_InitColormaps ();
|
||||||
//StartScreen->Progress();
|
//StartScreen->Progress();
|
||||||
|
|
||||||
R_InitPointToAngle ();
|
|
||||||
R_InitTables ();
|
R_InitTables ();
|
||||||
R_InitTranslationTables ();
|
R_InitTranslationTables ();
|
||||||
R_SetViewSize (screenblocks);
|
R_SetViewSize (screenblocks);
|
||||||
|
|
|
@ -37,6 +37,4 @@
|
||||||
|
|
||||||
fixed_t finetangent[4096];
|
fixed_t finetangent[4096];
|
||||||
fixed_t finesine[10240];
|
fixed_t finesine[10240];
|
||||||
angle_t tantoangle[2049];
|
|
||||||
|
|
||||||
cosine_inline finecosine; // in case this is actually needed
|
|
||||||
|
|
50
src/tables.h
50
src/tables.h
|
@ -24,11 +24,8 @@
|
||||||
// effectively, by shifting).
|
// effectively, by shifting).
|
||||||
//
|
//
|
||||||
// int finesine[10240] - Sine lookup.
|
// int finesine[10240] - Sine lookup.
|
||||||
// Guess what, serves as cosine, too.
|
|
||||||
// Remarkable thing is, how to use BAMs with this?
|
// 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 <math.h>
|
#include <math.h>
|
||||||
#include "basictypes.h"
|
#include "basictypes.h"
|
||||||
|
|
||||||
#ifndef PI
|
|
||||||
#define PI 3.14159265358979323846 // matches value in gcc v2 math.h
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#define FINEANGLEBITS 13
|
|
||||||
#define FINEANGLES 8192
|
#define FINEANGLES 8192
|
||||||
#define FINEMASK (FINEANGLES-1)
|
#define FINEMASK (FINEANGLES-1)
|
||||||
|
|
||||||
// 0x100000000 to 0x2000
|
// 0x100000000 to 0x2000
|
||||||
#define ANGLETOFINESHIFT 19
|
#define ANGLETOFINESHIFT 19
|
||||||
|
|
||||||
#define BOBTOFINESHIFT (FINEANGLEBITS - 6)
|
|
||||||
|
|
||||||
// Effective size is 10240.
|
// Effective size is 10240.
|
||||||
extern fixed_t finesine[5*FINEANGLES/4];
|
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.
|
// Effective size is 4096.
|
||||||
extern fixed_t finetangent[FINEANGLES/2];
|
extern fixed_t finetangent[FINEANGLES/2];
|
||||||
|
|
||||||
// Binary Angle Measument, BAM.
|
// 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_90 (0x40000000)
|
||||||
#define ANGLE_180 (0x80000000)
|
#define ANGLE_180 (0x80000000)
|
||||||
#define ANGLE_270 (0xc0000000)
|
#define ANGLE_270 (0xc0000000)
|
||||||
#define ANGLE_MAX (0xffffffff)
|
#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;
|
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__
|
#endif // __TABLES_H__
|
||||||
|
|
Loading…
Reference in a new issue