Мы находимся в процессе создания игры для iPhone, используя cocos2d . Мы пытаемся наложить несколько спрайтов друг на друга и заставить их отбрасывать тени.
Прямо сейчас тени отображаются как спрайты, которые по большей части работают нормально. Но мы хотим, чтобы тени попали в ближайший слой.
Я создал изображение, которое, мы надеемся, объясняет, чего мы пытаемся достичь:
![image](https://dl.dropbox.com/u/509876/ShadowExample.jpg)
А вот что мы имеем на данный момент:
![image](https://dl.dropbox.com/u/509876/ShadowExampleFail.jpg)
По сути, мы хотим, чтобы спрайт отображал только ту часть тени, которая находится на той же глубине, что и z-буфер.
Мы поиграли с 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 )
, и мы очищаем буфер глубины для каждого кадра.
Любая помощь будет принята с благодарностью!