这篇教程C++ FixedDiv函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中FixedDiv函数的典型用法代码示例。如果您正苦于以下问题:C++ FixedDiv函数的具体用法?C++ FixedDiv怎么用?C++ FixedDiv使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了FixedDiv函数的29个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: FixedHypotfixed_t FixedHypot(fixed_t x, fixed_t y){#ifdef HAVE_HYPOT const float fx = FIXED_TO_FLOAT(x); const float fy = FIXED_TO_FLOAT(y); float fz;#ifdef HAVE_HYPOTF fz = hypotf(fx, fy);#else fz = (float)hypot(fx, fy);#endif return FLOAT_TO_FIXED(fz);#else // !HAVE_HYPOT fixed_t ax, yx, yx2, yx1; if (abs(y) > abs(x)) // |y|>|x| { ax = abs(y); // |y| => ax yx = FixedDiv(x, y); // (x/y) } else // |x|>|y| { ax = abs(x); // |x| => ax yx = FixedDiv(y, x); // (x/y) } yx2 = FixedMul(yx, yx); // (x/y)^2 yx1 = FixedSqrt(1+FRACUNIT + yx2); // (1 + (x/y)^2)^1/2 return FixedMul(ax, yx1); // |x|*((1 + (x/y)^2)^1/2)#endif}
开发者ID:Pupswoof117,项目名称:SRB2-Public,代码行数:29,
示例2: AM_addMark/*void AM_addMark(void){ markpoints[markpointnum].x = m_x + m_w/2; markpoints[markpointnum].y = m_y + m_h/2; markpointnum = (markpointnum + 1) % AM_NUMMARKPOINTS;}*/void AM_findMinMaxBoundaries(void){ int i; fixed_t a, b; min_x = min_y = INT_MAX; max_x = max_y = -INT_MAX; for (i = 0; i < numvertexes; i++) { if (vertexes[i].x < min_x) min_x = vertexes[i].x; else if (vertexes[i].x > max_x) max_x = vertexes[i].x; if (vertexes[i].y < min_y) min_y = vertexes[i].y; else if (vertexes[i].y > max_y) max_y = vertexes[i].y; } max_w = max_x - min_x; max_h = max_y - min_y; min_w = 2 * PLAYERRADIUS; min_h = 2 * PLAYERRADIUS; a = FixedDiv(f_w << FRACBITS, max_w); b = FixedDiv(f_h << FRACBITS, max_h); min_scale_mtof = a < b ? a : b; max_scale_mtof = FixedDiv(f_h << FRACBITS, 2 * PLAYERRADIUS);}
开发者ID:Azarien,项目名称:chocolate-doom,代码行数:39,
示例3: FixedDivvector_t *FV_DivideEx(const vector_t *a_i, fixed_t a_c, vector_t *a_o){ a_o->x = FixedDiv(a_i->x, a_c); a_o->y = FixedDiv(a_i->y, a_c); a_o->z = FixedDiv(a_i->z, a_c); return a_o;}
开发者ID:Pupswoof117,项目名称:SRB2-Public,代码行数:7,
示例4: EV_BuildPillarint EV_BuildPillar(line_t *line, byte *args, boolean crush){ int secnum; sector_t *sec; pillar_t *pillar; int newHeight; int rtn; rtn = 0; secnum = -1; while((secnum = P_FindSectorFromTag(args[0], secnum)) >= 0) { sec = §ors[secnum]; if(sec->specialdata) continue; // already moving if(sec->floorheight == sec->ceilingheight) { // pillar is already closed continue; } rtn = 1; if(!args[2]) { newHeight = sec->floorheight+ ((sec->ceilingheight-sec->floorheight)/2); } else { newHeight = sec->floorheight+(args[2]<<FRACBITS); } pillar = Z_Malloc(sizeof(*pillar), PU_LEVSPEC, 0); sec->specialdata = pillar; P_AddThinker(&pillar->thinker); pillar->thinker.function = T_BuildPillar; pillar->sector = sec; if(!args[2]) { pillar->ceilingSpeed = pillar->floorSpeed = args[1]*(FRACUNIT/8); } else if(newHeight-sec->floorheight > sec->ceilingheight-newHeight) { pillar->floorSpeed = args[1]*(FRACUNIT/8); pillar->ceilingSpeed = FixedMul(sec->ceilingheight-newHeight, FixedDiv(pillar->floorSpeed, newHeight-sec->floorheight)); } else { pillar->ceilingSpeed = args[1]*(FRACUNIT/8); pillar->floorSpeed = FixedMul(newHeight-sec->floorheight, FixedDiv(pillar->ceilingSpeed, sec->ceilingheight-newHeight)); } pillar->floordest = newHeight; pillar->ceilingdest = newHeight; pillar->direction = 1; pillar->crush = crush*args[3]; SN_StartSequence((mobj_t *)&pillar->sector->soundorg, SEQ_PLATFORM+pillar->sector->seqType); } return rtn;}
开发者ID:shovelmachine,项目名称:hexentouch,代码行数:60,
示例5: R_InitSkyMapvoid R_InitSkyMap (){ if (textureheight == NULL) return; if (textureheight[skytexture] <= (128 << FRACBITS)) { skytexturemid = 100*FRACUNIT; skystretch = (r_stretchsky && allowfreelook); } else { skytexturemid = 100*FRACUNIT; skystretch = 0; } skyheight = textureheight[skytexture] << skystretch; if (viewwidth && viewheight) { skyiscale = (200*FRACUNIT) / (((freelookviewheight<<detailxshift) * viewwidth) / (viewwidth<<detailxshift)); skyscale = ((((freelookviewheight<<detailxshift) * viewwidth) / (viewwidth<<detailxshift)) << FRACBITS) /(200); skyiscale = FixedMul (skyiscale, FixedDiv (clipangle, ANG45)); skyscale = FixedMul (skyscale, FixedDiv (ANG45, clipangle)); } // The sky map is 256*128*4 maps. skyshift = 22+skystretch-16; if (texturewidthmask[skytexture] >= 256*2-1) skyshift -= skystretch;}
开发者ID:JohnnyonFlame,项目名称:odamex,代码行数:31,
示例6: R_ClearPlanesvoid R_ClearPlanes(void){ int i; angle_t angle;//// opening / clipping determination// for (i = 0; i < viewwidth; i++) { floorclip[i] = viewheight; ceilingclip[i] = -1; } lastvisplane = visplanes; lastopening = openings;//// texture calculation// memset(cachedheight, 0, sizeof(cachedheight)); angle = (viewangle - ANG90) >> ANGLETOFINESHIFT; // left to right mapping // scale will be unit scale at SCREENWIDTH/2 distance basexscale = FixedDiv(finecosine[angle], centerxfrac); baseyscale = -FixedDiv(finesine[angle], centerxfrac);}
开发者ID:fabiangreffrath,项目名称:crispy-doom,代码行数:27,
示例7: R_BlastSpriteColumnvoid R_BlastSpriteColumn(void (*drawfunc)()){ tallpost_t* post = dcol.post; while (!post->end()) { // calculate unclipped screen coordinates for post int topscreen = sprtopscreen + spryscale * post->topdelta + 1; dcol.yl = (topscreen + FRACUNIT) >> FRACBITS; dcol.yh = (topscreen + spryscale * post->length) >> FRACBITS; dcol.yl = MAX(dcol.yl, mceilingclip[dcol.x] + 1); dcol.yh = MIN(dcol.yh, mfloorclip[dcol.x] - 1); dcol.texturefrac = dcol.texturemid - (post->topdelta << FRACBITS) + (dcol.yl * dcol.iscale) - FixedMul(centeryfrac - FRACUNIT, dcol.iscale); if (dcol.texturefrac < 0) { int cnt = (FixedDiv(-dcol.texturefrac, dcol.iscale) + FRACUNIT - 1) >> FRACBITS; dcol.yl += cnt; dcol.texturefrac += cnt * dcol.iscale; } const fixed_t endfrac = dcol.texturefrac + (dcol.yh - dcol.yl) * dcol.iscale; const fixed_t maxfrac = post->length << FRACBITS; if (endfrac >= maxfrac) { int cnt = (FixedDiv(endfrac - maxfrac - 1, dcol.iscale) + FRACUNIT - 1) >> FRACBITS; dcol.yh -= cnt; }
开发者ID:JohnnyonFlame,项目名称:odamex,代码行数:33,
示例8: FixedDivvoid Scene::showSprites() { // TODO: This is all experimental code, it needs heavy restructuring // and cleanup // taken from set_walker_scaling() in adv_walk.cpp. A proper implementation will need // to store these in global variables int minScaling = FixedDiv(_sceneResources->backScale << 16, 100 << 16); int maxScaling = FixedDiv(_sceneResources->frontScale << 16, 100 << 16); int scaler; _vm->_actor->setWalkerDirection(kFacingSouthEast); //_vm->_actor->setWalkerPalette(); // taken from set_walker_scaling() in adv_walk.cpp if (_sceneResources->frontY == _sceneResources->backY) scaler = 0; else scaler = FixedDiv(maxScaling - minScaling, (_sceneResources->frontY << 16) - (_sceneResources->backY << 16)); // FIXME: For now, we (incorrectly) scale the walker to 50% of the scene's max scaling _vm->_actor->setWalkerScaling(scaler / 2); // Test code to display the protagonist _vm->_actor->placeWalkerSpriteAt(0, 320, 200); // Test code to display scene sprites // TODO}
开发者ID:Templier,项目名称:scummvm-test,代码行数:28,
示例9: InitializeFadestatic void InitializeFade(boolean fadeIn){ unsigned i; Palette = Z_Malloc(768*sizeof(fixed_t), PU_STATIC, 0); PaletteDelta = Z_Malloc(768*sizeof(fixed_t), PU_STATIC, 0); RealPalette = Z_Malloc(768*sizeof(byte), PU_STATIC, 0); if(fadeIn) { memset(RealPalette, 0, 768*sizeof(byte)); for(i = 0; i < 768; i++) { Palette[i] = 0; PaletteDelta[i] = FixedDiv((*((byte *)W_CacheLumpName("playpal", PU_CACHE)+i))<<FRACBITS, 70*FRACUNIT); } } else { for(i = 0; i < 768; i++) { RealPalette[i] = *((byte *)W_CacheLumpName("playpal", PU_CACHE)+i); Palette[i] = RealPalette[i]<<FRACBITS; PaletteDelta[i] = FixedDiv(Palette[i], -70*FRACUNIT); } } I_SetPalette(RealPalette);}
开发者ID:BruceJawn,项目名称:flash-doom,代码行数:29,
示例10: FV_NormalizeEx// Also returns the magnitudefixed_t FV_NormalizeEx(const vector_t *a_normal, vector_t *a_o){ fixed_t magnitude = FV_Magnitude(a_normal); a_o->x = FixedDiv(a_normal->x, magnitude); a_o->y = FixedDiv(a_normal->y, magnitude); a_o->z = FixedDiv(a_normal->z, magnitude); return magnitude;}
开发者ID:Pupswoof117,项目名称:SRB2-Public,代码行数:9,
示例11: PTR_chaseTraverse//// PTR_chaseTraverse//// go til you hit a wall// set the chasecam target x and ys if you hit one// originally based on the shooting traverse function in p_maputl.c//static bool PTR_chaseTraverse(intercept_t *in){ fixed_t dist, frac; subsector_t *ss; int x, y; int z; sector_t *othersector; if(in->isaline) { line_t *li = in->d.line; dist = FixedMul(trace.attackrange, in->frac); frac = in->frac - FixedDiv(12*FRACUNIT, trace.attackrange); // hit line // position a bit closer x = trace.dl.x + FixedMul(trace.dl.dx, frac); y = trace.dl.y + FixedMul(trace.dl.dy, frac); // ioanch 20160225: portal lines are currently not crossed if(li->flags & ML_TWOSIDED && !(li->pflags & PS_PASSABLE)) { // crosses a two sided line // sf: find which side it hit ss = R_PointInSubsector (x, y); othersector = li->backsector; if(ss->sector==li->backsector) // other side othersector = li->frontsector; // interpolate, find z at the point of intersection z = zi(dist, trace.attackrange, targetz, playermobj->z+28*FRACUNIT); // found which side, check for intersections if((li->flags & ML_BLOCKING) || (othersector->floorheight>z) || (othersector->ceilingheight<z) || (othersector->ceilingheight-othersector->floorheight < 40*FRACUNIT)); // hit else { return true; // continue } } targetx = x; // point the new chasecam target at the intersection targety = y; targetz = zi(dist, trace.attackrange, targetz, playermobj->z+28*FRACUNIT); // don't go any farther return false; } return true;}
开发者ID:Blastfrog,项目名称:eternity,代码行数:67,
示例12: FV_PlaneIntersection//// PlaneIntersection//// Returns the distance from// rOrigin to where the ray// intersects the plane. Assumes// you already know it intersects// the plane.//fixed_t FV_PlaneIntersection(const vector_t *pOrigin, const vector_t *pNormal, const vector_t *rOrigin, const vector_t *rVector){ fixed_t d = -(FV_Dot(pNormal, pOrigin)); fixed_t number = FV_Dot(pNormal,rOrigin) + d; fixed_t denom = FV_Dot(pNormal,rVector); return -FixedDiv(number, denom);}
开发者ID:Pupswoof117,项目名称:SRB2-Public,代码行数:16,
示例13: R_InitLightTablesvoid R_InitLightTables (void){ int i; // killough 4/4/98: dynamic colormaps c_zlight = malloc(sizeof(*c_zlight) * numcolormaps); // Calculate the light levels to use // for each level / distance combination. for (i=0; i< LIGHTLEVELS; i++) { int j, startmap = ((LIGHTLEVELS-1-i)*2)*NUMCOLORMAPS/LIGHTLEVELS; for (j=0; j<MAXLIGHTZ; j++) { // CPhipps - use 320 here instead of SCREENWIDTH, otherwise hires is // brighter than normal res int scale = FixedDiv ((320/2*FRACUNIT), (j+1)<<LIGHTZSHIFT); int t, level = startmap - (scale >>= LIGHTSCALESHIFT)/DISTMAP; if (level < 0) level = 0; else if (level >= NUMCOLORMAPS) level = NUMCOLORMAPS-1; // killough 3/20/98: Initialize multiple colormaps level *= 256; for (t=0; t<numcolormaps; t++) // killough 4/4/98 c_zlight[t][i][j] = colormaps[t] + level; } }}
开发者ID:WinterMute,项目名称:dsdoom,代码行数:32,
示例14: AM_LevelInitvoid AM_LevelInit(void){ leveljuststarted = 0; f_x = f_y = 0; f_w = finit_width; f_h = finit_height; mapxstart = mapystart = 0;// AM_clearMarks(); AM_findMinMaxBoundaries(); scale_mtof = FixedDiv(min_scale_mtof, (int) (0.7*FRACUNIT)); if (scale_mtof > max_scale_mtof) scale_mtof = min_scale_mtof; scale_ftom = FixedDiv(FRACUNIT, scale_mtof);}
开发者ID:BruceJawn,项目名称:flash-doom,代码行数:17,
示例15: FixedDiv//// AM_getIslope()//// Calculates the slope and slope according to the x-axis of a line// segment in map coordinates (with the upright y-axis n' all) so// that it can be used with the brain-dead drawing stuff.//// Passed the line slope is desired for and an islope_t structure for return// Returns nothing//void AM_getIslope( mline_t* ml, islope_t* is ){ int dx, dy; dy = ml->a.y - ml->b.y; dx = ml->b.x - ml->a.x; if (!dy) is->islp = (dx<0?-MAXINT:MAXINT); else is->islp = FixedDiv(dx, dy); if (!dx) is->slp = (dy<0?-MAXINT:MAXINT); else is->slp = FixedDiv(dy, dx);}
开发者ID:fragglet,项目名称:mbf,代码行数:27,
示例16: AM_LevelInit//// AM_LevelInit()//// Initialize the automap at the start of a new level// should be called at the start of every level//// Passed nothing, returns nothing// Affects automap's global variables//void AM_LevelInit(void){ f_x = f_y = 0; // killough 2/7/98: get rid of finit_ vars // to allow runtime setting of width/height // // killough 11/98: ... finally add hires support :) f_w = (SCREENWIDTH) << hires; f_h = (SCREENHEIGHT-ST_HEIGHT) << hires; AM_findMinMaxBoundaries(); scale_mtof = FixedDiv(min_scale_mtof, (int) (0.7*FRACUNIT)); if (scale_mtof > max_scale_mtof) scale_mtof = min_scale_mtof; scale_ftom = FixedDiv(FRACUNIT, scale_mtof);}
开发者ID:fragglet,项目名称:mbf,代码行数:27,
示例17: R_CopySubimage//// R_CopySubimage//// Copies a portion of source_texture and draws it into dest_texture.// The source subimage is scaled to fit the dimensions of the destination// texture.//// Note: no clipping is performed so it is possible to read past the// end of the source texture.//void R_CopySubimage(Texture* dest_texture, const Texture* source_texture, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2){ const int destwidth = dx2 - dx1 + 1; const int destheight = dy2 - dy1 + 1; const int sourcewidth = sx2 - sx1 + 1; const int sourceheight = sy2 - sy1 + 1; const fixed_t xstep = FixedDiv(sourcewidth << FRACBITS, destwidth << FRACBITS) + 1; const fixed_t ystep = FixedDiv(sourceheight << FRACBITS, destheight << FRACBITS) + 1; int dest_offset = dx1 * dest_texture->getHeight() + dy1; byte* dest = dest_texture->getData() + dest_offset; byte* dest_mask = dest_texture->getMaskData() + dest_offset; fixed_t xfrac = 0; for (int xcount = destwidth; xcount > 0; xcount--) { int source_offset = (sx1 + (xfrac >> FRACBITS)) * source_texture->getHeight() + sy1; const byte* source = source_texture->getData() + source_offset; const byte* source_mask = source_texture->getMaskData() + source_offset; fixed_t yfrac = 0; for (int ycount = destheight; ycount > 0; ycount--) { *dest++ = source[yfrac >> FRACBITS]; *dest_mask++ = source_mask[yfrac >> FRACBITS]; yfrac += ystep; } dest += dest_texture->getHeight() - destheight; dest_mask += dest_texture->getHeight() - destheight; xfrac += xstep; } // copy the source texture's offset info int xoffs = FixedDiv(source_texture->getOffsetX() << FRACBITS, xstep) >> FRACBITS; int yoffs = FixedDiv(source_texture->getOffsetY() << FRACBITS, ystep) >> FRACBITS; dest_texture->setOffsetX(xoffs); dest_texture->setOffsetY(yoffs);}
开发者ID:JohnnyonFlame,项目名称:odamex,代码行数:54,
示例18: R_InitTextureMappingstatic void R_InitTextureMapping (void){ register int i,x; 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++) { int t; 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++) { for (i=0; viewangletox[i] > x; i++) ; xtoviewangle[x] = (i<<ANGLETOFINESHIFT)-ANG90; } // Take out the fencepost cases from viewangletox. for (i=0; i<FINEANGLES/2; i++) if (viewangletox[i] == -1) viewangletox[i] = 0; else if (viewangletox[i] == viewwidth+1) viewangletox[i] = viewwidth; clipangle = xtoviewangle[0];}
开发者ID:WinterMute,项目名称:dsdoom,代码行数:56,
示例19: sqrtfunction int sqrt(int number){ if (number == 1.0) return 1.0; if (number <= 0) return 0; int val = 150.0; for (int i=0; i<15; i++) val = (val + FixedDiv(number, val)) >> 1; return val;}
开发者ID:IjonTichy,项目名称:JKEMod,代码行数:10,
示例20: R_ScaleFromGlobalAnglestatic fixed_t R_ScaleFromGlobalAngle(angle_t visangle){ int anglea = ANG90 + (visangle-viewangle); int angleb = ANG90 + (visangle-rw_normalangle); int den = FixedMul(rw_distance, finesine[anglea>>ANGLETOFINESHIFT]);// proff 11/06/98: Changed for high-res fixed_t num = FixedMul(projectiony, finesine[angleb>>ANGLETOFINESHIFT]); return den > num>>16 ? (num = FixedDiv(num, den)) > 64*FRACUNIT ? 64*FRACUNIT : num < 256 ? 256 : num : 64*FRACUNIT;}
开发者ID:Krazygamr,项目名称:D-Touch,代码行数:10,
示例21: R_InitTextureMapping//// 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. const fixed_t hitan = finetangent[FINEANGLES / 4 + FIELDOFVIEW / 2]; const fixed_t lotan = finetangent[FINEANGLES / 4 - FIELDOFVIEW / 2]; const int highend = viewwidth + 1; // Calc focallength // so FIELDOFVIEW angles covers SCREENWIDTH. focallength = FixedDiv(centerxfrac, hitan); for (i = 0; i < FINEANGLES / 2; i++) { fixed_t tangent = finetangent[i]; if (tangent > hitan) t = -1; else if (tangent < lotan) t = highend; else { t = (centerxfrac - FixedMul(tangent, focallength) + FRACUNIT - 1) >> FRACBITS; t = MAX(-1, (MIN(t, highend))); } 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++) { for (i = 0; viewangletox[i] > x; i++); xtoviewangle[x] = (i << ANGLETOFINESHIFT) - ANG90; } // Take out the fencepost cases from viewangletox. for (i = 0; i < FINEANGLES / 2; i++) { if (viewangletox[i] == -1) viewangletox[i] = 0; else if (viewangletox[i] == highend) viewangletox[i]--; } clipangle = xtoviewangle[0];}
开发者ID:arneolavhal,项目名称:doomretro,代码行数:58,
示例22: AM_restoreScaleAndLocvoid AM_restoreScaleAndLoc(void){ m_w = old_m_w; m_h = old_m_h; if (!followplayer) { m_x = old_m_x; m_y = old_m_y; } else { m_x = plr->mo->x - m_w/2; m_y = plr->mo->y - m_h/2; } m_x2 = m_x + m_w; m_y2 = m_y + m_h; // Change the scaling multipliers scale_mtof = FixedDiv(f_w<<FRACBITS, m_w); scale_ftom = FixedDiv(FRACUNIT, scale_mtof);}
开发者ID:BruceJawn,项目名称:flash-doom,代码行数:20,
示例23: AM_changeWindowScalevoid AM_changeWindowScale(void){ // Change the scaling multipliers scale_mtof = FixedMul(scale_mtof, mtof_zoommul); scale_ftom = FixedDiv(FRACUNIT, scale_mtof); if (scale_mtof < min_scale_mtof) AM_minOutWindowScale(); else if (scale_mtof > max_scale_mtof) AM_maxOutWindowScale(); else AM_activateNewScale();}
开发者ID:BruceJawn,项目名称:flash-doom,代码行数:11,
示例24: R_DrawMaskedSpriteColumnstatic void R_DrawMaskedSpriteColumn(column_t *column, int baseclip){ while (column->topdelta != 0xff) { // calculate unclipped screen coordinates for post int topscreen = sprtopscreen + spryscale * column->topdelta + 1; dc_yl = MAX((topscreen + FRACUNIT) >> FRACBITS, mceilingclip[dc_x] + 1); dc_yh = MIN((topscreen + spryscale * column->length) >> FRACBITS, mfloorclip[dc_x] - 1); if (baseclip != -1) dc_yh = MIN(baseclip, dc_yh); fuzzclip = baseclip; dc_texturefrac = dc_texturemid - (column->topdelta << FRACBITS) + FixedMul((dc_yl - centery) << FRACBITS, dc_iscale); if (dc_texturefrac < 0) { int cnt = (FixedDiv(-dc_texturefrac, dc_iscale) + FRACUNIT - 1) >> FRACBITS; dc_yl += cnt; dc_texturefrac += cnt * dc_iscale; } { const fixed_t endfrac = dc_texturefrac + (dc_yh - dc_yl) * dc_iscale; const fixed_t maxfrac = column->length << FRACBITS; if (endfrac >= maxfrac) dc_yh -= (FixedDiv(endfrac - maxfrac - 1, dc_iscale) + FRACUNIT - 1) >> FRACBITS; } if (dc_yl <= dc_yh && dc_yh < viewheight) { dc_source = (byte *)column + 3; colfunc(); } column = (column_t *)((byte *)column + column->length + 4); }
开发者ID:AlexMax,项目名称:doomretro,代码行数:40,
示例25: R_DrawMaskedColumnvoid R_DrawMaskedColumn(tallpost_t *post){ while (!post->end()) { if (post->length == 0) { post = post->next(); continue; } // calculate unclipped screen coordinates for post int topscreen = sprtopscreen + spryscale * post->topdelta + 1; dc_yl = (topscreen + FRACUNIT) >> FRACBITS; dc_yh = (topscreen + spryscale * post->length) >> FRACBITS; if (dc_yh >= mfloorclip[dc_x]) dc_yh = mfloorclip[dc_x] - 1; if (dc_yl <= mceilingclip[dc_x]) dc_yl = mceilingclip[dc_x] + 1; dc_texturefrac = dc_texturemid - (post->topdelta << FRACBITS) + (dc_yl*dc_iscale) - FixedMul(centeryfrac-FRACUNIT, dc_iscale); if (dc_texturefrac < 0) { int cnt = (FixedDiv(-dc_texturefrac, dc_iscale) + FRACUNIT - 1) >> FRACBITS; dc_yl += cnt; dc_texturefrac += cnt * dc_iscale; } const fixed_t endfrac = dc_texturefrac + (dc_yh-dc_yl)*dc_iscale; const fixed_t maxfrac = post->length << FRACBITS; if (endfrac >= maxfrac) { int cnt = (FixedDiv(endfrac - maxfrac - 1, dc_iscale) + FRACUNIT - 1) >> FRACBITS; dc_yh -= cnt; }
开发者ID:JohnnyonFlame,项目名称:odamex,代码行数:39,
示例26: P_SpawnLightSequencevoid P_SpawnLightSequence(Sector* sector, int indexStep){ int count; { findlightsequencesectorparams_t params; params.seqSpecial = LIGHT_SEQUENCE; // Look for Light_Sequence, first. params.count = 1; params.sec = sector; do { // Make sure that the search doesn't back up. P_ToXSector(params.sec)->special = LIGHT_SEQUENCE_START; params.nextSec = NULL; P_Iteratep(params.sec, DMU_LINE, ¶ms, findLightSequenceSector); params.sec = params.nextSec; } while(params.sec); count = params.count; } { findlightsequencestartsectorparams_t params; float base; fixed_t index, indexDelta; params.sec = sector; count *= indexStep; index = 0; indexDelta = FixedDiv(64 * FRACUNIT, count * FRACUNIT); base = P_SectorLight(sector); do { if(P_SectorLight(params.sec)) { base = P_SectorLight(params.sec); } P_SpawnPhasedLight(params.sec, base, index >> FRACBITS); index += indexDelta; params.nextSec = NULL; P_Iteratep(params.sec, DMU_LINE, ¶ms, findLightSequenceStartSector); params.sec = params.nextSec; } while(params.sec); }}
开发者ID:roman313,项目名称:Doomsday-Engine,代码行数:50,
示例27: SCR_Recalc// Called at new frame, if the video mode has changed//void SCR_Recalc(void){ if (dedicated) return; // bytes per pixel quick access scr_bpp = vid.bpp; // scale 1,2,3 times in x and y the patches for the menus and overlays... // calculated once and for all, used by routines in v_video.c vid.dupx = vid.width / BASEVIDWIDTH; vid.dupy = vid.height / BASEVIDHEIGHT; vid.fdupx = (float)vid.width / BASEVIDWIDTH; vid.fdupy = (float)vid.height / BASEVIDHEIGHT; vid.baseratio = FixedDiv(vid.height << FRACBITS, BASEVIDHEIGHT << FRACBITS); // patch the asm code depending on vid buffer rowbytes#ifdef RUSEASM if (R_ASM) ASM_PatchRowBytes(vid.rowbytes);// if (R_486 || R_586 || R_MMX)// MMX_PatchRowBytes(vid.rowbytes);#endif // toggle off automap because some screensize-dependent values will // be calculated next time the automap is activated. if (automapactive) AM_Stop(); // r_plane stuff: visplanes, openings, floorclip, ceilingclip, spanstart, // spanstop, yslope, distscale, cachedheight, cacheddistance, // cachedxstep, cachedystep // -> allocated at the maximum vidsize, static. // r_main: xtoviewangle, allocated at the maximum size. // r_things: negonearray, screenheightarray allocated max. size. // set the screen[x] ptrs on the new vidbuffers V_Init(); // scr_viewsize doesn't change, neither detailLevel, but the pixels // per screenblock is different now, since we've changed resolution. R_SetViewSize(); //just set setsizeneeded true now .. // vid.recalc lasts only for the next refresh... con_recalc = true; am_recalc = true;}
开发者ID:Pupswoof117,项目名称:SRB2-Public,代码行数:50,
示例28: P_GetChasecamTargetstatic void P_GetChasecamTarget(){ int aimfor; subsector_t *ss; int ceilingheight, floorheight; // aimfor is the preferred height of the chasecam above // the player // haleyjd: 1 unit for each degree of pitch works surprisingly well aimfor = players[displayplayer].viewheight + chasecam_height*FRACUNIT + FixedDiv(players[displayplayer].pitch, ANGLE_1); trace.sin = finesine[playerangle>>ANGLETOFINESHIFT]; trace.cos = finecosine[playerangle>>ANGLETOFINESHIFT]; targetx = playermobj->x - chasecam_dist * trace.cos; targety = playermobj->y - chasecam_dist * trace.sin; targetz = playermobj->z + aimfor;#ifdef R_LINKEDPORTALS targetgroupid = playermobj->groupid;#endif // the intersections test mucks up the first time, but // aiming at something seems to cure it // ioanch 20160101: don't let P_AimLineAttack change global trace.attackrange fixed_t oldAttackRange = trace.attackrange; // ioanch 20160225: just change trace.attackrange, don't call P_AimLineAttack trace.attackrange = MELEERANGE; // check for intersections P_PathTraverse(playermobj->x, playermobj->y, targetx, targety, PT_ADDLINES, PTR_chaseTraverse); trace.attackrange = oldAttackRange; ss = R_PointInSubsector(targetx, targety); floorheight = ss->sector->floorheight; ceilingheight = ss->sector->ceilingheight; // don't aim above the ceiling or below the floor if(targetz > ceilingheight - 10*FRACUNIT) targetz = ceilingheight - 10*FRACUNIT; if(targetz < floorheight + 10*FRACUNIT) targetz = floorheight + 10*FRACUNIT;}
开发者ID:Blastfrog,项目名称:eternity,代码行数:46,
示例29: R_InitLightTablesvoid R_InitLightTables(void){ int i; // Calculate the light levels to use // for each level / distance combination. for (i = 0; i < LIGHTLEVELS; i++) { int j, startmap = ((LIGHTLEVELS - 1 - i) * 2) * NUMCOLORMAPS / LIGHTLEVELS; for (j = 0; j < MAXLIGHTZ; j++) { int scale = FixedDiv(SCREENWIDTH / 2 * FRACUNIT, (j + 1) << LIGHTZSHIFT); int level = startmap - (scale >> LIGHTSCALESHIFT) / DISTMAP; if (level < 0) level = 0; else if (level >= NUMCOLORMAPS) level = NUMCOLORMAPS - 1; zlight[i][j] = colormaps + level * 256; } }}
开发者ID:arneolavhal,项目名称:doomretro,代码行数:24,
注:本文中的FixedDiv函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ FixedMul函数代码示例 C++ FixMul函数代码示例 |