看板 GameDesign 關於我們 聯絡資訊
darkflier:兩個effect 08/17 12:24
謝謝你的回覆 但是這也是我所苦惱的地方 我上一篇文章寫的不清楚 請見諒 我苦惱的地方是 如果使用兩個以上 effect 那他載入的迴圈 要如何撰寫?? 一個effect時候的迴圈如下 : --- if (SUCCEEDED(g_pEffect->SetTechnique(hTechnique))) { if (SUCCEEDED(g_pEffect->Begin(&totalPasses, 0))) { for (UINT pass2 = 0; pass2 < totalPasses; ++pass2) { if (SUCCEEDED(g_pEffect->BeginPass(pass))) { g_pDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 12); g_pEffect->EndPass(); } } g_pEffect->End(); } } --- 應該不是單純的執行上述迴圈兩次吧?? 因為我這樣測試的結果 會讓第二次的執行的 effect 覆蓋第一次執行的結果 而不是同時執行兩個結果 也試過用兩個 effect 並使用下面的巢狀回圈執行過 但是只有出現到第一個effect的效果 --- if (SUCCEEDED(g_pEffect2->SetTechnique(hTechnique2))) { if (SUCCEEDED(g_pEffect2->Begin(&totalPasses2, 0))) { for (UINT pass = 0; pass < totalPasses2; ++pass) { if (SUCCEEDED(g_pEffect2->BeginPass(pass))) { // Render the cube. if (SUCCEEDED(g_pEffect->SetTechnique(hTechnique))) { if (SUCCEEDED(g_pEffect->Begin(&totalPasses, 0))) { for (UINT pass = 0; pass < totalPasses; ++pass) { if (SUCCEEDED(g_pEffect->BeginPass(pass))) { g_pDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 12); g_pEffect->EndPass(); } } g_pEffect->End(); } } g_pEffect2->EndPass(); } g_pEffect2->End(); } } } --- 我不知道上述的程式碼 我是否哪邊有搞錯 不知可否請你指導一下 給一些提示 而且若使用上述的結構 那麼在必須 大量同時使用 Shader 時的情況下 難道就是使用 遞迴 的方式 寫一個巢狀迴圈 不斷的往內部執行嗎?? 不好意思 打了一長串的問題 不過還是請你多多幫忙 謝謝你的推文 謝謝你 <(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.76.190.21
NDark:概念上是在目標場景render前把要用的shader裝上. 08/17 15:16
darkflier:首先呢你必須要做的是 08/17 15:36
darkflier:\Samples\C++\Direct3D\PostProcess 08/17 15:37
darkflier:把這個範例看完你就懂了 08/17 15:37
darkflier:重點不是你有幾個shader有幾個effect 08/17 15:37
darkflier:重點是你要用哪個effect 08/17 15:38
darkflier:看來你不是很了解technique可以幹什麼 08/17 15:39
darkflier:並不是所有的technique都被需要使用 08/17 15:40
darkflier:你可以只用你要的 即使不是同一個effect 08/17 15:40
darkflier:只要輸入的vertex format是相同的 就可以被使用 08/17 15:40
darkflier:其實不同也可以啦 不過你現在應該不用考慮到那麼深 08/17 15:41
pleaselouis:打完下面的文章 才看到樓上推文 囧 謝謝你 真是好範例 08/17 15:50
darkflier:因為我今天翹班 所以現在很閒\(^▽^)/ 08/17 16:08
pleaselouis:囧 某種意義上 還真羨慕... 08/17 16:24