Обычно постобработка работает по всему экрану.На самом деле это довольно просто.
Что вы делаете, это устанавливаете цель рендеринга на устройстве (я полагаю, вы можете выяснить, как создать цель рендеринга из образца):
GraphicsDevice.SetRenderTarget(renderTarget);
С этого момента все, что вы рендерите, будет отображаться для этой цели рендеринга.Когда вы закончите, вы можете вернуть устройство обратно в буфер:
GraphicsDevice.SetRenderTarget(null);
И, наконец, вы можете рисовать, используя вашу цель рендеринга, как если бы это была текстура ( это новое вXNA 4.0 , в XNA 3.1 вам нужно было вызвать GetTexture
на нем).
Итак, чтобы создать эффект постобработки:
- Визуализация вашей сцены в рендереtarget
- Переключение обратно в задний буфер
- Визуализация цели рендеринга в полноэкранном режиме (с помощью
SpriteBatch
) с помощью пиксельного шейдера, который будет применять ваш эффект постобработки.
Похоже, вы хотите сделать это для каждой модели?Что кажется странным, но определенно возможным.Просто убедитесь, что ваша цель рендеринга имеет прозрачный альфа-канал для начала, а затем нарисуйте его с альфа-смешиванием.
Или вы вообще не имеете в виду постобработку?Вы действительно хотите изменить пиксельный шейдер, с которым рисуется модель, сохраняя вершинный шейдер скиновой модели?