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);
    
    
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值