2010-02-02 3 views
3

WPF에서 원뿔/원형 그라디언트를 다시 만들고 싶습니다. System.Windows.Media.GradientBrush - 상속받을 수있는 것으로 보았지만 많은 내부 파이프를 사용하여 작업 완료 (System.Windows.Media.Brush에서 상속)WPF에서 원추/원뿔/원형 그라디언트를 구현하는 방법

이것을 달성하는 방법 (비트 맵에 의지하지 말고 선호)

환호.

이 질문 7 월 (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)); 
관련 문제