Мы в процессе создания iPhone-игры, используя cocos2d. Мы пытаемся сложить несколько спрайтов друг на друга и заставить их отбрасывать тени.iPhone-игра 2d shadows
Прямо сейчас тени отображаются как спрайты, которые отлично работают по большей части. Но мы хотим, чтобы тени попадали в самый близкий слой.
Я сделал образ, который мы надеемся, объясняет то, что мы пытаемся достичь:
И вот что мы имеем на данный момент:
В основном мы хотите, чтобы спрайт отображал только часть тени, которая находится на той же глубине, что и 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)
, и мы очищаем буфер глубины на каждом кадре.
Любая помощь будет высоко оценена!
Спасибо! Используя ваш подход, я смог получить результат, который мы искали, к сожалению, за счет частоты кадров. Теперь, когда он работает по назначению, я могу начать искать способы оптимизации производительности. – aegzorz