Как реализовать конический / конус / круговой градиент в WPF - PullRequest
4 голосов
/ 02 февраля 2010

Я хотел бы воссоздать конический / круговой градиент в WPF.Я изучил наследование System.Windows.Media.GradientBrush, которое можно унаследовать, но для выполнения работы используется множество внутренних функций (унаследовано от System.Windows.Media.Brush)идеи о том, как этого добиться, будут приветствоваться (желательно без использования растровых изображений)

Cheers.

Дан

Этот вопрос был задан некоторое время назад в июле ( Круговой градиент и WPF ), но я не хотел воскрешать старый вопрос.

1 Ответ

5 голосов
/ 03 февраля 2010

Вы можете создать собственный эффект.Я бы порекомендовал скачать Shazzam , вам также понадобится DirectX SDK.Дайте элементу горизонтальный градиент, затем примените эффект, чтобы превратить его в конусный градиент.

/// <class>AngleGradient</class>
/// <description>Renders an angle gradient.</description>
//-----------------------------------------------------------------------------------------
// Shader constant register mappings (scalars - float, double, Point, Color, Point3D, etc.)
//-----------------------------------------------------------------------------------------
/// <summary>The centre of the gradient.</summary>
/// <minValue>0</minValue>
/// <maxValue>1</maxValue>
/// <defaultValue>0.5,0.5</defaultValue>
float2 Centre : register(C0);

/// <summary>The start angle.</summary>
/// <minValue>0</minValue>
/// <maxValue>1</maxValue>
/// <defaultValue>0</defaultValue>
float Angle : register(C1);

//--------------------------------------------------------------------------------------
// Sampler Inputs (Brushes, including ImplicitInput)
//--------------------------------------------------------------------------------------

sampler1D implicitInputSampler : register(S0);
static const float PI = 3.14159265f;
//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 main(float2 uv : TEXCOORD) : COLOR
{
    float angle = atan2(uv.y-Centre.y, uv.x-Centre.x)+PI;
    angle = (angle/(2*PI)) + Angle; 
    return tex1D(implicitInputSampler,min(angle > 1 ? angle-1 : angle,0.99));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...