我们正在使用cocos2d创建一个 iPhone 游戏。我们正在尝试将多个精灵层叠在一起并让它们投射阴影。
现在阴影被渲染为精灵,在大多数情况下都可以正常工作。但我们只希望阴影击中最近的图层。
我制作了一张图片,希望能解释我们正在努力实现的目标:
这就是我们目前所拥有的:
基本上我们希望精灵只渲染与 z-buffer 相同深度的阴影部分。
我们玩过glDepthFunc
,GL_DEPTH_TEST
但似乎没有任何效果。
下面是我们如何渲染阴影精灵(CCSprite 的子类):
- (void)draw {
glDisable( GL_BLEND );
glEnable( GL_DEPTH_TEST );
glDepthFunc( GL_LESS );
glDepthMask( GL_FALSE );
[super draw];
glDepthMask( GL_TRUE );
glDisable( GL_DEPTH_TEST );
glEnable( GL_BLEND );
}
调用只是在GL_BLEND
那里,所以我们可以随时看到精灵。
所有不是阴影的精灵都使用glDepthMask( GL_TRUE )
,我们正在清除每一帧的深度缓冲区。
任何帮助将非常感激!