|
#define SCREEN_WIDTH 240
#define SCREEN_HEIGHT 320
#define LEN SCREEN_HEIGHT*2 //视距
#define FLOAT_OFFSET (0x1000)
long SIN_LOOK[360];
long COS_LOOK[360];
void InitGlobal()
{
for (int angle=0; angle < 360; angle++)
{
float rad_angle = (float)(angle * 0.0174533);
SIN_LOOK[angle] = sin(rad_angle)*FLOAT_OFFSET;
COS_LOOK[angle] = cos(rad_angle)*FLOAT_OFFSET;
}
}
void Projection(int nMapX, int nMapY, int iAngle, int &n3DX, int &n3DY)
{
long tmpX = nMapX - SCREEN_WIDTH/2;
long tmpY = nMapY - SCREEN_HEIGHT/2;
long fa = tmpY*SIN_LOOK[iAngle] + LEN*FLOAT_OFFSET;
int nX = LEN*tmpX*FLOAT_OFFSET/fa;
int nY = LEN*tmpY*COS_LOOK[iAngle]/fa;
n3DX = nX + SCREEN_WIDTH/2;
n3DY = nY + SCREEN_HEIGHT/2;
} |
|