Могу ли я контролировать порядок прорисовки в FX Composer? - PullRequest
0 голосов
/ 10 марта 2011

Я использую Nvidia FX Composer для написания полупрозрачного шейдера CgFX. Все хорошо, ожидайте, что в моем представлении рендеринга объекты позади сцены рисуются поверх моего затененного объекта.

вот моя техника:

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 рисует элементы на экране?

1 Ответ

0 голосов
/ 10 марта 2011

Это не может быть сделано внутри шейдера, вам нужно изменить приложение, используя его.Общее правило состоит в том, чтобы сначала рисовать все твердые объекты, а затем все прозрачные объекты сверху.

После того как вы нарисовали прозрачный объект, вы не можете рендерить объекты позади него и ожидать, что они будут смешаны.OpenGL может отображать или не отображать его (из-за отбраковки z-буфера).

Рисование объектов на переднем плане, как правило, слишком дорого в реальном времени, так как для этого потребуется повторная сортировка вся сцена 60 раз в секунду!

...