2010-02-02 2 views
3

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

Любые идеи по как достичь этого будет оценено (желательно, не прибегая к растровым изображениям)

Cheers.

Dan

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

+1

Проблема с постановкой вопроса заключается в том, что он скорее всего будет закрыт как дубликат. К сожалению, как новый пользователь, у вас нет доступа к инструментам, необходимым для устранения исходного вопроса, поэтому я не могу предложить решение. – ChrisF

ответ

5

Вы можете создать собственный эффект. Я бы порекомендовал скачать 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)); 
Смежные вопросы