→ 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