Чтобы создать скос, вам нужно знать расстояние от края для каждого пикселя (искать во всех направлениях, пока альфа = 0).Из этого вы можете вычислить нормальное и затемнять его (см. Пример с Silverlight).Как вы упомянули, не так много контента о фасках, но есть несколько хороших ресурсов, если вы ищете рельефное / нормальное отображение, на которое похож затенение.В частности, этот поток имеет пример Silverlight с использованием предварительно рассчитанной карты нормалей.
Для идеального выполнения всего на аппаратном уровне вы должны использовать многопроходный шейдер, встроенные эффекты WPF являются многопроходными, но этоне позволяет вам писать свои собственные.Чтобы обойти это ограничение:
- Вы можете создать несколько шейдеров и вложить свой элемент в несколько элементов управления, применяя разные эффекты к каждому.
- Target WPF 4.0 и использовать Pixel Shader 3.0 дляувеличенный счетчик команд.Хотя это может быть слишком высоким требованием к оборудованию, и для PS 3.0
- не существует запасного программного обеспечения. Выполните некоторые или все шаги в программном обеспечении.
Без выполнения одного из этих действий выВам повезет сделать скос в 3 или 4 пикселя, прежде чем вы достигнете предела команд, так как циклы, необходимые для определения расстояния, быстро увеличивают количество команд.
Новый образец
Загрузка .Вот пример, который использует PixelShader 3.0.Он использует один шейдер для определения расстояния (или высоты) до края, другой (на основе шейдеров nvidia phong ) используется для его затенения.Профили скоса создаются путем регулировки высоты ввода либо с помощью кода, либо пользовательский профиль можно использовать путем предоставления специальной текстуры.Есть некоторые другие функции, которые нужно добавить, но они кажутся легко выполнимыми для анимации свойств.Его не хватает в комментариях, но я могу объяснить детали, если это необходимо.