大家好,经过前面三节课的学习,我们已经可以掌握将模型加载到游戏中进行显示,并且做出模型在水中受波光影响的效果,也学会了如何产生闪电链。这一节课,我们来学习一下如何开发旋涡特效。
在《捕鱼达人3》里,有这样一个效果,它实现了对屏幕画面进行旋转扭曲,感觉就像带着玩家通过旋涡进入了海底的世界。如图:
哈哈!看起来是不是很流弊!
具体怎么实现呢?现在我们来学习一下。
要现实这样的效果主要分为三个步骤:
一、将屏幕画面渲染到一张纹理上。
二、创建一个平面网格模型,然后将第一步取得的纹理做为贴图传入一个顶点纹理坐标扭曲Shader进行渲染。
三、随着时间的增加,更新Shader中顶点纹理坐标扭曲的角度和半径。
为了方便使用,我们创建一个基于Layer的派生类,命名为VortexLayer,然后我们在其中加入一个CCRenderTexture成员指针,在初始化时创建为屏幕大小:
1
2
3
4
5
6
|
// 创建渲染目标纹理
auto WinSize = Director::getInstance()->getWinSize();
m_pTarget = CCRenderTexture::create(WinSize.width, WinSize.height, kCCTexture2DPixelFormat_RGBA8888);
m_pTarget->setClearColor(Color4F(0, 0, 0, 0));
m_pTarget->setVisible(
false
);
addChild(m_pTarget);
|
并通过它我们在draw的时候将目标Layer结点中的所有物体绘制到它的纹理中。
1
2
3
4
5
6
7
8
9
10
11
12
|
void
VortexLayer::draw(Renderer* renderer,
const
Mat4 &transform, uint32_t flags)
{
if
( m_pTarget && m_TargetLayer)
{
m_pTarget->clear(0,0,0,0);
m_pTarget->begin();
m_TargetLayer->visit();
m_pTarget->end();
}
…
}
|
然后我们需要加入一个Mesh成员对象指针,并设置它的顶点数据,使它在形成一个与屏幕大小相等的平面网格。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|