2011-03-10 37 views
0

我正在使用Nvidia FX編寫器編寫半透明CgFX着色器。一切都很好,期望在渲染視圖中,場景後面的對象正在繪製在我陰影對象的頂部。我可以控制FX Composer中的繪圖順序嗎?

這裏是我的技術:

technique Main { 
    pass p0 
    { 
     DepthTestEnable = true; 
     DepthMask = false; 
     CullFaceEnable = false; 
     BlendEnable = true; 
     BlendFunc = int2(SrcAlpha, OneMinusSrcAlpha); 
     DepthFunc = LEqual; 
     VertexProgram = compile vp40 std_VS(); 
     FragmentProgram = compile gp4fp std_PS(); 
    } 
}

如果我打開DepthMask,然後在後面的物體得到完全屏蔽掉了,這違背了透明性的目的。看起來好像這些物體並沒有被拉回到前面。有沒有辦法確認,我可以控制FX Composer渲染器在屏幕上繪製項目的順序嗎?

+0

沒有深度遮罩沒有深度緩衝技術不起作用。事實上,似乎對象在渲染之前沒有進行深度排序。我不知道這是否可以教給FxComposer。但是你可以在你的程序中做到這一點。 – datenwolf 2011-03-10 19:07:56

回答

0

這不能在着色器內完成,您需要使用它來更改應用程序。一般規則是首先繪製所有實體對象,然後繪製所有透明對象。

一旦你繪製了一個透明對象,你就不能渲染它後面的對象,並期望它們被混合。 OpenGL可以渲染它,也可以不渲染它(由於z緩衝區剔除)。

繪製物體回到正面通常實在太昂貴,因爲它需要每秒60次重新整理!

+0

在這種情況下,使用着色器的應用程序是FX Composer。我的問題是FX Composer是否可以被告知按順序渲染場景對象(至少是透明的)。 – duggulous 2011-03-10 19:54:28

相關問題