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

📄 render.c

📁 国外游戏开发者杂志1997年第九期配套代码
💻 C
📖 第 1 页 / 共 3 页
字号:
  
  Ru  *=   SrcWidth;
  Rv  *=  SrcHeight;
  
  Bu  *=   SrcWidth;
  Bv  *=  SrcHeight;

 

  fULabsleny = (fULy>0 ? fULy : -fULy);
  fURabsleny = (fURy>0 ? fURy : -fURy);
  fLLabsleny = (fLLy>0 ? fLLy : -fLLy);
  fLRabsleny = (fLRy>0 ? fLRy : -fLRy);

  fDestDeltaTX = fULabsleny==0 ? (fULx<<xshiftleft) : (fULx<<xshiftleft)/(fULabsleny);
  fDestDeltaLX = fLLabsleny==0 ? (fLLx<<xshiftleft) : (fLLx<<xshiftleft)/(fLLabsleny);
  fDestDeltaRX = fURabsleny==0 ? (fURx<<xshiftleft) : (fURx<<xshiftleft)/(fURabsleny);
  fDestDeltaBX = fLRabsleny==0 ? (fLRx<<xshiftleft) : (fLRx<<xshiftleft)/(fLRabsleny);

  fDestDeltaTZ = fULabsleny==0 ? (fULz<<zshiftleft) : (fULz<<zshiftleft)/(fULabsleny);
  fDestDeltaLZ = fLLabsleny==0 ? (fLLz<<zshiftleft) : (fLLz<<zshiftleft)/(fLLabsleny);
  fDestDeltaRZ = fURabsleny==0 ? (fURz<<zshiftleft) : (fURz<<zshiftleft)/(fURabsleny);
  fDestDeltaBZ = fLRabsleny==0 ? (fLRz<<zshiftleft) : (fLRz<<zshiftleft)/(fLRabsleny);

  
  fDestDeltaTU  = fULabsleny==0 ?   (Lu - Tu ) : (Lu - Tu ) / (fULabsleny);
  fDestDeltaLU  = fLLabsleny==0 ?  (Bu - Lu)   : (Bu - Lu) / (fLLabsleny);
  fDestDeltaRU = fURabsleny==0 ?  (Ru - Tu)  :  (Ru - Tu) / (fURabsleny);
  fDestDeltaBU = fLRabsleny==0 ?  (Bu - Ru)  : (Bu - Ru) / (fLRabsleny);
  
  fDestDeltaTV  = fULabsleny==0 ?   (Lv - Tv ) : (Lv - Tv ) / (fULabsleny);
  fDestDeltaLV  = fLLabsleny==0 ?  (Bv - Lv)   : (Bv - Lv) / (fLLabsleny);
  fDestDeltaRV = fURabsleny==0 ?  (Rv - Tv)  :  (Rv - Tv) / (fURabsleny);
  fDestDeltaBV = fLRabsleny==0 ?  (Bv - Rv)  : (Bv - Rv) / (fLRabsleny);
  
  fDestDeltaTI  = fULabsleny==0 ?   (Li - Ti ) : (Li - Ti ) / (fULabsleny);
  fDestDeltaLI  = fLLabsleny==0 ?  (Bi - Li)   : (Bi - Li) / (fLLabsleny);
  fDestDeltaRI = fURabsleny==0 ?  (Ri - Ti)  :  (Ri - Ti) / (fURabsleny);
  fDestDeltaBI = fLRabsleny==0 ?  (Bi - Ri)  : (Bi - Ri) / (fLRabsleny);
  


  /*
  fSrcWidth       = SrcWidth<<16;
  fSrcHeight      = SrcHeight<<16;
  fSrcTopDelta    = fULy == 0 ? -(fSrcWidth  - (1<<16)) : (fSrcWidth  - (1<<16)) / fULy;
  fSrcRightDelta  = fURy == 0 ?  (fSrcHeight - (1<<16)) : (fSrcHeight - (1<<16)) / fURy;
  fSrcBottomDelta = fLRy == 0 ?  (fSrcWidth  - (1<<16)) : (fSrcWidth  - (1<<16)) / fLRy;
  fSrcLeftDelta   = fLLy == 0 ? -(fSrcHeight - (1<<16)) : (fSrcHeight - (1<<16)) / fLLy;
*/
  num_lines[0]    = 0;
  num_lines[1]    = 0;
  num_lines[2]    = 0;

  if((Ly >= Ry) && (Ry >= By))
  {
	//Top
	orientation             = 0;
    
	fDestStartXArray[0]     = Tx<<xshiftleft;
    fDestEndXArray[0]       = Tx<<xshiftleft;
    fDestStartDeltaX[0]     = -fDestDeltaTX;
    fDestEndDeltaX[0]       = fDestDeltaRX; 	  
    fDestStartZArray[0]     = Tz<<zshiftleft;
	fDestEndZArray[0]       = Tz<<zshiftleft;
	fDestStartDeltaZ[0]     = -fDestDeltaTZ;
	fDestEndDeltaZ[0]       = fDestDeltaRZ;

    fSrcEdgeStartDeltaX[0]  = -fSrcTopDelta;
    fSrcEdgeStartDeltaY[0]  = 0;
    fSrcEdgeEndDeltaX[0]    = 0;
    fSrcEdgeEndDeltaY[0]    = -fSrcRightDelta;
    num_lines[0]            = Ty-Ly;
   	
	fDestStartUArray[0]     = Tu;
    fDestEndUArray[0]      = Tu;
    fDestStartDeltaU[0]     = fDestDeltaTU;
    fDestEndDeltaU[0]      = fDestDeltaRU; 
	
	fDestStartVArray[0]     = Tv;
    fDestEndVArray[0]      = Tv;
    fDestStartDeltaV[0]     = fDestDeltaTV;
    fDestEndDeltaV[0]      = fDestDeltaRV; 
    
    fDestStartIArray[0]     = Ti;
    fDestEndIArray[0]      = Ti;
    fDestStartDeltaI[0]     = fDestDeltaTI;
    fDestEndDeltaI[0]      = fDestDeltaRI; 
	
	//Middle
	fDestStartXArray[1]     = Lx<<xshiftleft;
    fDestEndXArray[1]       = fDestEndXArray[0] + fDestEndDeltaX[0]*num_lines[0];
    fDestStartDeltaX[1]     = fDestDeltaLX;
    fDestEndDeltaX[1]       = fDestDeltaRX;
    fDestStartZArray[1]     = Lz<<zshiftleft;
	fDestEndZArray[1]       = fDestEndZArray[0] + fDestEndDeltaZ[0]*num_lines[0];
	fDestStartDeltaZ[1]     = fDestDeltaLZ;
	fDestEndDeltaZ[1]       = fDestDeltaRZ;
    
	fSrcEdgeStartDeltaX[1]  = 0;
    fSrcEdgeStartDeltaY[1]  = -fSrcLeftDelta;
    fSrcEdgeEndDeltaX[1]    = 0;
    fSrcEdgeEndDeltaY[1]    = -fSrcRightDelta;
    num_lines[1]            = Ly-Ry;

    fDestStartUArray[1]     = Lu;
    fDestEndUArray[1]      = fDestEndUArray[0] + fDestEndDeltaU[0]*num_lines[0];
    fDestStartDeltaU[1]     = fDestDeltaLU;
    fDestEndDeltaU[1]      =  fDestDeltaRU;
	
	fDestStartVArray[1]     = Lv;
    fDestEndVArray[1]      = fDestEndVArray[0] + fDestEndDeltaV[0]*num_lines[0];
    fDestStartDeltaV[1]     = fDestDeltaLV;
    fDestEndDeltaV[1]      =  fDestDeltaRV;
    
	fDestStartIArray[1]     = Li;
    fDestEndIArray[1]      = fDestEndIArray[0] + fDestEndDeltaI[0]*num_lines[0];
    fDestStartDeltaI[1]     = fDestDeltaLI;
    fDestEndDeltaI[1]      =  fDestDeltaRI;
	
	//Bottom
	fDestStartXArray[2]     = fDestStartXArray[1] + fDestStartDeltaX[1]*num_lines[1];
    fDestEndXArray[2]       = Rx<<xshiftleft;
    fDestStartDeltaX[2]     = fDestDeltaLX;
    fDestEndDeltaX[2]       = -fDestDeltaBX;
    fDestStartZArray[2]     = fDestStartZArray[1] + fDestStartDeltaZ[1]*num_lines[1];
	fDestEndZArray[2]       = Rz<<zshiftleft;
	fDestStartDeltaZ[2]     = fDestDeltaLZ;
	fDestEndDeltaZ[2]       = -fDestDeltaBZ;

	fSrcEdgeStartDeltaX[2]  = 0;
    fSrcEdgeStartDeltaY[2]  = -fSrcLeftDelta;
    fSrcEdgeEndDeltaX[2]    = -fSrcBottomDelta;
    fSrcEdgeEndDeltaY[2]    = 0;
    num_lines[2]                 = Ry-By;
	
    fDestStartUArray[2]    = fDestStartUArray[1] + fDestStartDeltaU[1]*num_lines[1];
    fDestEndUArray[2]      = Ru;
    fDestStartDeltaU[2]     = fDestDeltaLU;
    fDestEndDeltaU[2]      = fDestDeltaBU;
	
	fDestStartVArray[2]     =  fDestStartVArray[1] + fDestStartDeltaV[1]*num_lines[1];
    fDestEndVArray[2]      = Rv;
    fDestStartDeltaV[2]     = fDestDeltaLV;
    fDestEndDeltaV[2]      =  fDestDeltaBV;
	
	fDestStartIArray[2]     =  fDestStartIArray[1] + fDestStartDeltaI[1]*num_lines[1];
    fDestEndIArray[2]      = Ri;
    fDestStartDeltaI[2]     = fDestDeltaLI;
    fDestEndDeltaI[2]      =  fDestDeltaBI;
  }
  
  else if((Ly >= By) && (By >= Ry))	      
  { 
	//Top
	orientation             = 1;
    fDestStartXArray[0]     = Tx<<xshiftleft;
    fDestEndXArray[0]       = Tx<<xshiftleft;
    fDestStartDeltaX[0]     = -fDestDeltaTX;
	fDestEndDeltaX[0]       = fDestDeltaRX;
    fDestStartZArray[0]     = Tz<<zshiftleft;
	fDestEndZArray[0]       = Tz<<zshiftleft;
	fDestStartDeltaZ[0]     = -fDestDeltaTZ;
	fDestEndDeltaZ[0]       = fDestDeltaRZ;

	fSrcEdgeStartDeltaX[0]  = -fSrcTopDelta;
	fSrcEdgeStartDeltaY[0]  = 0;
	fSrcEdgeEndDeltaX[0]    = 0;
	fSrcEdgeEndDeltaY[0]    = -fSrcRightDelta;
	num_lines[0]            = Ty-Ly;
	
	fDestStartUArray[0]     = Tu;
    fDestEndUArray[0]      = Tu;
    fDestStartDeltaU[0]     = fDestDeltaTU;
    fDestEndDeltaU[0]      =  fDestDeltaRU; 
	
	fDestStartVArray[0]     = Tv;
    fDestEndVArray[0]      = Tv;
    fDestStartDeltaV[0]     =  fDestDeltaTV ;
    fDestEndDeltaV[0]      =  fDestDeltaRV ; 
	
	fDestStartIArray[0]     = Ti;
    fDestEndIArray[0]      = Ti;
    fDestStartDeltaI[0]     =  fDestDeltaTI ;
    fDestEndDeltaI[0]      =  fDestDeltaRI ; 
	
	//Middle
	fDestStartXArray[1]     = Lx<<xshiftleft;
	fDestEndXArray[1]       = fDestEndXArray[0] + fDestEndDeltaX[0]*num_lines[0];
	fDestStartDeltaX[1]     = fDestDeltaLX;
    fDestEndDeltaX[1]       = fDestDeltaRX;
    fDestStartZArray[1]     = Lz<<zshiftleft;
	fDestEndZArray[1]       = fDestEndZArray[0] + fDestEndDeltaZ[0]*num_lines[0];
	fDestStartDeltaZ[1]     = fDestDeltaLZ;
	fDestEndDeltaZ[1]       = fDestDeltaRZ;

    fSrcEdgeStartDeltaX[1]  = 0;
    fSrcEdgeStartDeltaY[1]  = -fSrcLeftDelta;
    fSrcEdgeEndDeltaX[1]    = 0;
    fSrcEdgeEndDeltaY[1]    = -fSrcRightDelta;
    num_lines[1]            = Ly-By;

	fDestStartUArray[1]     = Lu;
	fDestEndUArray[1]       = fDestEndUArray[0] + fDestEndDeltaU[0]*num_lines[0];
	fDestStartDeltaU[1]     = fDestDeltaLU;
    fDestEndDeltaU[1]       = fDestDeltaRU;
    
	fDestStartVArray[1]     = Lv;
	fDestEndVArray[1]       = fDestEndVArray[0] + fDestEndDeltaV[0]*num_lines[0];
	fDestStartDeltaV[1]     = fDestDeltaLV;
	fDestEndDeltaV[1]       = fDestDeltaRV;

	fDestStartIArray[1]     = Li;
	fDestEndIArray[1]       = fDestEndIArray[0] + fDestEndDeltaI[0]*num_lines[0];
	fDestStartDeltaI[1]     = fDestDeltaLI;
	fDestEndDeltaI[1]       = fDestDeltaRI;
    
	//Bottom
	fDestStartXArray[2]     = Bx<<xshiftleft;
    fDestEndXArray[2]       = fDestEndXArray[1] + fDestEndDeltaX[1]*num_lines[1];
    fDestStartDeltaX[2]     = fDestDeltaBX;
    fDestEndDeltaX[2]       = fDestDeltaRX;
    fDestStartZArray[2]     = Bz<<zshiftleft;
	fDestEndZArray[2]       = fDestEndZArray[1] + fDestEndDeltaZ[1]*num_lines[1];
	fDestStartDeltaZ[2]     = fDestDeltaBZ;
	fDestEndDeltaZ[2]       = fDestDeltaRZ;

    fSrcEdgeStartDeltaX[2]  = fSrcBottomDelta;
    fSrcEdgeStartDeltaY[2]  = 0;
    fSrcEdgeEndDeltaX[2]    = 0;
    fSrcEdgeEndDeltaY[2]    = -fSrcRightDelta;
    num_lines[2]            = By-Ry;
 
  	fDestStartUArray[2]     = Bu;
    fDestEndUArray[2]       = fDestEndUArray[1] + fDestEndDeltaU[1]*num_lines[1];
    fDestStartDeltaU[2]     = -fDestDeltaBU;
    fDestEndDeltaU[2]       = fDestDeltaRU;
    
	fDestStartVArray[2]     = Bv;
	fDestEndVArray[2]       = fDestEndVArray[1] + fDestEndDeltaV[1]*num_lines[1];
	fDestStartDeltaV[2]     = -fDestDeltaBV;
	fDestEndDeltaV[2]       = fDestDeltaRV;
	
	fDestStartIArray[2]     = Bi;
	fDestEndIArray[2]       = fDestEndIArray[1] + fDestEndDeltaI[1]*num_lines[1];
	fDestStartDeltaI[2]     = -fDestDeltaBI;
	fDestEndDeltaI[2]       = fDestDeltaRI;
 }
  
  else if((Ry >= By) && (By >= Ly))
  {
	Ty = Ty + 0;

	//Top
	orientation             = 2;
    fDestStartXArray[0]     = Tx<<xshiftleft;
    fDestEndXArray[0]       = Tx<<xshiftleft;
    fDestStartDeltaX[0]     = -fDestDeltaTX;
    fDestEndDeltaX[0]       = fDestDeltaRX;
    fDestStartZArray[0]     = Tz<<zshiftleft;
	fDestEndZArray[0]       = Tz<<zshiftleft;
	fDestStartDeltaZ[0]     = -fDestDeltaTZ;
	fDestEndDeltaZ[0]       = fDestDeltaRZ;

    fSrcEdgeStartDeltaX[0]  = -fSrcTopDelta;
    fSrcEdgeStartDeltaY[0]  = 0;
    fSrcEdgeEndDeltaX[0]    = 0;
    fSrcEdgeEndDeltaY[0]    = -fSrcRightDelta;
    num_lines[0]            = Ty-Ry;
    
	fDestStartUArray[0]     = Tu;
    fDestEndUArray[0]       = Tu;
    fDestStartDeltaU[0]     = fDestDeltaTU;
    fDestEndDeltaU[0]       = fDestDeltaRU;
    
	fDestStartVArray[0]     = Tv;
	fDestEndVArray[0]       = Tv;
	fDestStartDeltaV[0]     =  fDestDeltaTV;
	fDestEndDeltaV[0]       = fDestDeltaRV;
	
	fDestStartIArray[0]     = Ti;
	fDestEndIArray[0]       = Ti;
	fDestStartDeltaI[0]     =  fDestDeltaTI;
	fDestEndDeltaI[0]       = fDestDeltaRI;

    //Middle
	fDestStartXArray[1]     = fDestStartXArray[0] + fDestStartDeltaX[0]*num_lines[0];
    fDestEndXArray[1]       = Rx<<xshiftleft;
    fDestStartDeltaX[1]     = -fDestDeltaTX;
    fDestEndDeltaX[1]       = -fDestDeltaBX;
    fDestStartZArray[1]     = fDestStartZArray[0] + fDestStartDeltaZ[0]*num_lines[0];
	fDestEndZArray[1]       = Rz<<zshiftleft;
	fDestStartDeltaZ[1]     = -fDestDeltaTZ;
	fDestEndDeltaZ[1]       = -fDestDeltaBZ;
    
	fSrcEdgeStartDeltaX[1]  = -fSrcTopDelta;
    fSrcEdgeStartDeltaY[1]  = 0;
    fSrcEdgeEndDeltaX[1]    = -fSrcBottomDelta;
    fSrcEdgeEndDeltaY[1]    = 0;
    num_lines[1]            = Ry-By;
	
	fDestStartUArray[1]     = fDestStartUArray[0] + fDestStartDeltaU[0]*num_lines[0];
    fDestEndUArray[1]       = Ru;
    fDestStartDeltaU[1]     = fDestDeltaTU;
    fDestEndDeltaU[1]       = fDestDeltaBU;
    
	fDestStartVArray[1]     = fDestStartVArray[0] + fDestStartDeltaV[0]*num_lines[0];
	fDestEndVArray[1]       = Rv;
	fDestStartDeltaV[1]     = fDestDeltaTV;
	fDestEndDeltaV[1]       = fDestDeltaBV;

	fDestStartIArray[1]     = fDestStartIArray[0] + fDestStartDeltaI[0]*num_lines[0];
	fDestEndIArray[1]       = Ri;
	fDestStartDeltaI[1]     = fDestDeltaTI;
	fDestEndDeltaI[1]       = fDestDeltaBI;

    //Bottom
	fDestStartXArray[2]     = fDestStartXArray[1] + fDestStartDeltaX[1]*num_lines[1];
    fDestEndXArray[2]       = (Bx+0)<<16;
    fDestStartDeltaX[2]     = -fDestDeltaTX;
    fDestEndDeltaX[2]       = -fDestDeltaLX;
    fDestStartZArray[2]     = fDestStartZArray[1] + fDestStartDeltaZ[1]*num_lines[1];
	fDestEndZArray[2]       = Bz<<zshiftleft;
	fDestStartDeltaZ[2]     = -fDestDeltaTZ;
	fDestEndDeltaZ[2]       = -fDestDeltaLZ;
    
	fSrcEdgeStartDeltaX[2]  = -fSrcTopDelta;
    fSrcEdgeStartDeltaY[2]  = 0;
    fSrcEdgeEndDeltaX[2]    = 0;
    fSrcEdgeEndDeltaY[2]    = -fSrcLeftDelta;
    num_lines[2]            = By-Ly;
	
	fDestStartUArray[2]     = fDestStartUArray[1] + fDestStartDeltaU[1]*num_lines[1];
    fDestEndUArray[2]       = Bu;
    fDestStartDeltaU[2]     = fDestDeltaTU;
    fDestEndDeltaU[2]       = -fDestDeltaLU;
    
	fDestStartVArray[2]     = fDestStartVArray[1] + fDestStartDeltaV[1]*num_lines[1];
	fDestEndVArray[2]       = Bv;
	fDestStartDeltaV[2]     = fDestDeltaTV;
	fDestEndDeltaV[2]       = -fDestDeltaLV;
	
	fDestStartIArray[2]     = fDestStartIArray[1] + fDestStartDeltaI[1]*num_lines[1];
	fDestEndIArray[2]       = Bi;
	fDestStartDeltaI[2]     = fDestDeltaTI;
	fDestEndDeltaI[2]       = -fDestDeltaLI;


  }
  
  else if((Ry >= Ly) && (Ly >= By))
  {
	//Top
	orientation             = 3;
    fDestStartXArray[0]     = Tx<<xshiftleft;
    fDestEndXArray[0]       = Tx<<xshiftleft;
    fDestStartDeltaX[0]     = -fDestDeltaTX;
    fDestEndDeltaX[0]       = fDestDeltaRX;
    fDestStartZArray[0]     = Tz<<zshiftleft;
	fDestEndZArray[0]       = Tz<<zshiftleft;
	fDestStartDeltaZ[0]     = -fDestDeltaTZ;
	fDestEndDeltaZ[0]       = fDestDeltaRZ;
    

⌨️ 快捷键说明

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