[英]iPhone game 2d shadows
我們正在使用cocos2d創建iPhone游戲。 我們正在嘗試將幾個精靈彼此疊加,並使它們投射陰影。
現在,陰影被渲染為精靈,在大多數情況下效果很好。 但是我們只希望陰影能打到最近的圖層。
我制作了一張圖片,希望可以解釋我們要完成的工作:
這是我們目前所擁有的:
基本上,我們希望精靈僅渲染與z緩沖區深度相同的陰影部分。
我們已經使用glDepthFunc
和GL_DEPTH_TEST
進行了glDepthFunc
,但是似乎沒有任何效果。
這是渲染陰影精靈(子類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 )
並且我們正在清除每個幀上的深度緩沖區。
任何幫助將非常感激!
glDepthFunc(GL_LESS)
實際上是默認值; 它的意思是“僅當當前在深度緩沖區中的物體更遠時才繪制像素”。 如果要完全相等,可以使用glDepthFunc(GL_EQUAL),但實際上,如果這樣做,您將獲得各種舍入奇數。
假定您可以為此使用深度值,如果您有十個對象,那么我建議您:
到第4步時,在繪制精靈的任何地方都將具有正確的深度信息,並且無論背景平面在哪里,都將設置最接近的可能值。 因此,正常的深度測試將在中間陰影上起作用-它們將在步驟3中繪制的任何內容之上繪制,而不在步驟2中繪制的任何事物之上繪制。
您正在使用深度緩沖區作為替代模具,舊版iPhone不支持。
如果您無法使用深度緩沖區執行此任務,那么我能想到的就是在第二個紋理單元中將陰影投影為紋理,將第一個作為蒙版紋理使用(如果您實際上是在繪制矩形,但我想您可能不是),然后為每個精靈上的每個陰影進行一次渲染。 那是一個可行的解決方案嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.