iPhone游戏2d阴影
我们正在使用创建iPhone游戏。我们正在尝试将几个精灵层叠在一起,并让它们投射阴影 现在,阴影被渲染为精灵,在大多数情况下效果良好。但我们只希望阴影击中最近的层 我制作了一幅图像,希望能解释我们试图实现的目标: 以下是我们目前的情况: 基本上,我们希望精灵只渲染与z缓冲区深度相同的阴影部分 我们已经使用了iPhone游戏2d阴影,iphone,opengl-es,cocos2d-iphone,shadows,Iphone,Opengl Es,Cocos2d Iphone,Shadows,我们正在使用创建iPhone游戏。我们正在尝试将几个精灵层叠在一起,并让它们投射阴影 现在,阴影被渲染为精灵,在大多数情况下效果良好。但我们只希望阴影击中最近的层 我制作了一幅图像,希望能解释我们试图实现的目标: 以下是我们目前的情况: 基本上,我们希望精灵只渲染与z缓冲区深度相同的阴影部分 我们已经使用了glDepthFunc和GL\u DEPTH\u TEST,但似乎没有任何效果 下面是我们如何渲染阴影精灵(子类CCSprite): GL\u BLEND调用只在那里,因此我们可以随时看到
glDepthFunc
和GL\u DEPTH\u TEST
,但似乎没有任何效果
下面是我们如何渲染阴影精灵(子类CCSprite):
GL\u BLEND
调用只在那里,因此我们可以随时看到精灵
所有非阴影的精灵都使用glDepthMask(GL\u TRUE)
,我们正在清除每个帧上的深度缓冲区
任何帮助都将不胜感激
glDepthFunc(GL_LESS)
实际上是默认值;它的意思是“仅当深度缓冲区中当前的对象距离较远时才绘制像素”。如果您想要完全相等,您可以使用glDepthFunc(GL_equal),但在实践中,如果您这样做,您将得到各种各样的舍入异常
假设您能够为此目的使用深度值,如果您有十个对象,那么我建议您:
如果您无法使用深度缓冲区来完成此任务,那么我所能想到的就是在第二个纹理单元中将阴影投影为纹理,使用第一个纹理作为遮罩纹理(如果您实际绘制的是矩形,也可以不这样做,但我想您可能不会),并对每个落在其上的阴影对每个精灵进行一次渲染。这是可行的解决方案吗?谢谢!使用您的方法,我能够得到我们想要的结果,不幸的是,以帧率为代价。现在,它的预期工作,我可以开始寻找优化性能的方法。
glDepthFunc(GL_LESS)