HGE教程翻译(5)

Tutorial 05 – 使用曲面变换

 

在这个教程中我们学习如何使用曲面变形,一种可以创建水面、透镜、纸张甚至实时的变化。我们使用静态的纹理,但你可以渲染你的整个游戏场景到一个纹理,通过扭曲网格来达到一些很酷的实时特效。

首先包含头文件和变量的声明。

 

#include <hge.h>
     
#include <hgedistort.h>
     
#include <math.h>
     

   
     
   
HGE *hge = 0;
     
HTEXTURE tex;
     
hgeDistortionMesh *dis;
     

 

接着我们声明一些常量。这里定义网格的数值和位置。

 

const int nRows=16;
     
const int nCols=16;
     

   
     
   
const float meshx=144;
     
const float meshy=44;
     

 

FrameFunc中需要一些变量。一对用于计时,结束符用来计算偏移。

 

  float dt;
     
  static float t=0.0f;
     
  int i, j, col;
     

 

现在是关键部分。我们计算网格的位移并通过时间流逝来上色。

 

  dt=hge->Timer_GetDelta();
     
  t+=dt;
     

   
     
   
  for(i=0; i<nRows; i++)
     
    for(j=1; j<nCols-1; j++)
     
    {
     
      dis->SetDisplacement(j, i, cosf(t*5+j/2)*15,0,HGEDISP_NODE);
     
      col=int((cosf(t*5+(i+j)/2)+1)*35);
     
      dis->SetColor(j, i, 0xFF<<24 | col<<16 | col<<8 | col);
     
    }
     

 

最终我们渲染网格在RenderFunc中:

 

  hge->Gfx_BeginScene();
     
  hge->Gfx_Clear(0);
     
  dis->Render(meshx, meshy);
     
  hge->Gfx_EndScene();
     

 

WinMain中我们载入纹理并初始化网格:

 

  tex=hge->Texture_Load("texture.jpg");
     
  dis=new hgeDistortionMesh(nCols, nRows);
     
  dis->SetTexture(tex);
     
  dis->SetTextureRect(0, 0, 512, 512);
     
  dis->SetBlendMode(BLEND_COLORADD|BLEND_ALPHABLEND|BLEND_ZWRITE);
     
  dis->Clear(0xFF000000);
     

 

结束时删除纹理和网格。

 

  delete dis;
     
  hge->Texture_Free(tex);
     
 

你可能感兴趣的:(HGE教程翻译(5))