⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 r_main.c

📁 Nxdoom真的满好用的
💻 C
📖 第 1 页 / 共 2 页
字号:
//// R_ScaleFromGlobalAngle// Returns the texture mapping scale//  for the current line (horizontal span)//  at the given angle.// rw_distance must be calculated first.//fixed_t R_ScaleFromGlobalAngle (angle_t visangle){    fixed_t		scale;    int			anglea;    int			angleb;    int			sinea;    int			sineb;    fixed_t		num;    int			den;    // UNUSED#if 0{    fixed_t		dist;    fixed_t		z;    fixed_t		sinv;    fixed_t		cosv;	    sinv = finesine[(visangle-rw_normalangle)>>ANGLETOFINESHIFT];	    dist = FixedDiv (rw_distance, sinv);    cosv = finecosine[(viewangle-visangle)>>ANGLETOFINESHIFT];    z = abs(FixedMul (dist, cosv));    scale = FixedDiv(projection, z);    return scale;}#endif    anglea = ANG90 + (visangle-viewangle);    angleb = ANG90 + (visangle-rw_normalangle);    // both sines are allways positive    sinea = finesine[anglea>>ANGLETOFINESHIFT];	    sineb = finesine[angleb>>ANGLETOFINESHIFT];    num = FixedMul(projection,sineb)<<detailshift;    den = FixedMul(rw_distance,sinea);    if (den > num>>16)    {	scale = FixedDiv (num, den);	if (scale > 64*FRACUNIT)	    scale = 64*FRACUNIT;	else if (scale < 256)	    scale = 256;    }    else	scale = 64*FRACUNIT;	    return scale;}//// R_InitTables//void R_InitTables (void){    // UNUSED: now getting from tables.c#if 0    int		i;    float	a;    float	fv;    int		t;        // viewangle tangent table    for (i=0 ; i<FINEANGLES/2 ; i++)    {	a = (i-FINEANGLES/4+0.5)*PI*2/FINEANGLES;	fv = FRACUNIT*tan (a);	t = fv;	finetangent[i] = t;    }        // finesine table    for (i=0 ; i<5*FINEANGLES/4 ; i++)    {	// OPTIMIZE: mirror...	a = (i+0.5)*PI*2/FINEANGLES;	t = FRACUNIT*sin (a);	finesine[i] = t;    }#endif}//// R_InitTextureMapping//void R_InitTextureMapping (void){    int			i;    int			x;    int			t;    fixed_t		focallength;        // Use tangent table to generate viewangletox:    //  viewangletox will give the next greatest x    //  after the view angle.    //    // Calc focallength    //  so FIELDOFVIEW angles covers SCREENWIDTH.    focallength = FixedDiv (centerxfrac,			    finetangent[FINEANGLES/4+FIELDOFVIEW/2] );	    for (i=0 ; i<FINEANGLES/2 ; i++)    {	if (finetangent[i] > FRACUNIT*2)	    t = -1;	else if (finetangent[i] < -FRACUNIT*2)	    t = viewwidth+1;	else	{	    t = FixedMul (finetangent[i], focallength);	    t = (centerxfrac - t+FRACUNIT-1)>>FRACBITS;	    if (t < -1)		t = -1;	    else if (t>viewwidth+1)		t = viewwidth+1;	}	viewangletox[i] = t;    }        // Scan viewangletox[] to generate xtoviewangle[]:    //  xtoviewangle will give the smallest view angle    //  that maps to x.	    for (x=0;x<=viewwidth;x++)    {	i = 0;	while (viewangletox[i]>x)	    i++;	xtoviewangle[x] = (i<<ANGLETOFINESHIFT)-ANG90;    }        // Take out the fencepost cases from viewangletox.    for (i=0 ; i<FINEANGLES/2 ; i++)    {	t = FixedMul (finetangent[i], focallength);	t = centerx - t;		if (viewangletox[i] == -1)	    viewangletox[i] = 0;	else if (viewangletox[i] == viewwidth+1)	    viewangletox[i]  = viewwidth;    }	    clipangle = xtoviewangle[0];}//// R_InitLightTables// Only inits the zlight table,//  because the scalelight table changes with view size.//#define DISTMAP		2void R_InitLightTables (void){    int		i;    int		j;    int		level;    int		startmap; 	    int		scale;        // Calculate the light levels to use    //  for each level / distance combination.    for (i=0 ; i< LIGHTLEVELS ; i++)    {	startmap = ((LIGHTLEVELS-1-i)*2)*NUMCOLORMAPS/LIGHTLEVELS;	for (j=0 ; j<MAXLIGHTZ ; j++)	{	    scale = FixedDiv ((SCREENWIDTH/2*FRACUNIT), (j+1)<<LIGHTZSHIFT);	    scale >>= LIGHTSCALESHIFT;	    level = startmap - scale/DISTMAP;	    	    if (level < 0)		level = 0;	    if (level >= NUMCOLORMAPS)		level = NUMCOLORMAPS-1;	    zlight[i][j] = colormaps + level*256;	}    }}//// R_SetViewSize// Do not really change anything here,//  because it might be in the middle of a refresh.// The change will take effect next refresh.//boolean		setsizeneeded;int		setblocks;int		setdetail;voidR_SetViewSize( int		blocks,  int		detail ){    setsizeneeded = true;    setblocks = blocks;    setdetail = detail;}//// R_ExecuteSetViewSize//void R_ExecuteSetViewSize (void){    fixed_t	cosadj;    fixed_t	dy;    int		i;    int		j;    int		level;    int		startmap; 	    setsizeneeded = false;    if (setblocks == 11)    {	scaledviewwidth = SCREENWIDTH;	viewheight = SCREENHEIGHT;    }    else    {	scaledviewwidth = setblocks*32;	viewheight = (setblocks*168/10)&~7;    }        detailshift = setdetail;    viewwidth = scaledviewwidth>>detailshift;	    centery = viewheight/2;    centerx = viewwidth/2;    centerxfrac = centerx<<FRACBITS;    centeryfrac = centery<<FRACBITS;    projection = centerxfrac;    if (!detailshift)    {	colfunc = basecolfunc = R_DrawColumn;	fuzzcolfunc = R_DrawFuzzColumn;	transcolfunc = R_DrawTranslatedColumn;	spanfunc = R_DrawSpan;    }    else    {	colfunc = basecolfunc = R_DrawColumnLow;	fuzzcolfunc = R_DrawFuzzColumn;	transcolfunc = R_DrawTranslatedColumn;	spanfunc = R_DrawSpanLow;    }    R_InitBuffer (scaledviewwidth, viewheight);	    R_InitTextureMapping ();        // psprite scales    pspritescale = FRACUNIT*viewwidth/SCREENWIDTH;    pspriteiscale = FRACUNIT*SCREENWIDTH/viewwidth;        // thing clipping    for (i=0 ; i<viewwidth ; i++)	screenheightarray[i] = viewheight;        // planes    for (i=0 ; i<viewheight ; i++)    {	dy = ((i-viewheight/2)<<FRACBITS)+FRACUNIT/2;	dy = abs(dy);	yslope[i] = FixedDiv ( (viewwidth<<detailshift)/2*FRACUNIT, dy);    }	    for (i=0 ; i<viewwidth ; i++)    {	cosadj = abs(finecosine[xtoviewangle[i]>>ANGLETOFINESHIFT]);	distscale[i] = FixedDiv (FRACUNIT,cosadj);    }        // Calculate the light levels to use    //  for each level / scale combination.    for (i=0 ; i< LIGHTLEVELS ; i++)    {	startmap = ((LIGHTLEVELS-1-i)*2)*NUMCOLORMAPS/LIGHTLEVELS;	for (j=0 ; j<MAXLIGHTSCALE ; j++)	{	    level = startmap - j*SCREENWIDTH/(viewwidth<<detailshift)/DISTMAP;	    	    if (level < 0)		level = 0;	    if (level >= NUMCOLORMAPS)		level = NUMCOLORMAPS-1;	    scalelight[i][j] = colormaps + level*256;	}    }}//// R_Init//extern int	detailLevel;extern int	screenblocks;void R_Init (void){    R_InitData ();    printf ("\nR_InitData");    R_InitPointToAngle ();    printf ("\nR_InitPointToAngle");    R_InitTables ();    // viewwidth / viewheight / detailLevel are set by the defaults    printf ("\nR_InitTables");    R_SetViewSize (screenblocks, detailLevel);    R_InitPlanes ();    printf ("\nR_InitPlanes");    R_InitLightTables ();    printf ("\nR_InitLightTables");    R_InitSkyMap ();    printf ("\nR_InitSkyMap");    R_InitTranslationTables ();    printf ("\nR_InitTranslationsTables");	    framecount = 0;}//// R_PointInSubsector//subsector_t*R_PointInSubsector( fixed_t	x,  fixed_t	y ){    node_t*	node;    int		side;    int		nodenum;    // single subsector is a special case    if (!numnodes)					return subsectors;		    nodenum = numnodes-1;    while (! (nodenum & NF_SUBSECTOR) )    {	node = &nodes[nodenum];	side = R_PointOnSide (x, y, node);	nodenum = node->children[side];    }	    return &subsectors[nodenum & ~NF_SUBSECTOR];}//// R_SetupFrame//void R_SetupFrame (player_t* player){		    int		i;        viewplayer = player;    viewx = player->mo->x;    viewy = player->mo->y;    viewangle = player->mo->angle + viewangleoffset;    extralight = player->extralight;    viewz = player->viewz;        viewsin = finesine[viewangle>>ANGLETOFINESHIFT];    viewcos = finecosine[viewangle>>ANGLETOFINESHIFT];	    sscount = 0;	    if (player->fixedcolormap)    {	fixedcolormap =	    colormaps	    + player->fixedcolormap*256*sizeof(lighttable_t);		walllights = scalelightfixed;	for (i=0 ; i<MAXLIGHTSCALE ; i++)	    scalelightfixed[i] = fixedcolormap;    }    else	fixedcolormap = 0;		    framecount++;    validcount++;}//// R_RenderView//void R_RenderPlayerView (player_t* player){	    R_SetupFrame (player);    // Clear buffers.    R_ClearClipSegs ();    R_ClearDrawSegs ();    R_ClearPlanes ();    R_ClearSprites ();        // check for new console commands.    NetUpdate ();    // The head node is the last node output.    R_RenderBSPNode (numnodes-1);        // Check for new console commands.    NetUpdate ();        R_DrawPlanes ();        // Check for new console commands.    NetUpdate ();        R_DrawMasked ();    // Check for new console commands.    NetUpdate ();				}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -