2012-05-10 10 views
8

Próbuję narysować sferyczne kawałki do gry, w WPF. Sztuk są rysowane jako Elipses with RadialGradientBrushs. Jak widać poniżej, moje czarne elementy wyglądają fantastycznie, , ale trudno jest uzyskać białe o dowolnej głębokości, nie nadając im szarego koloru.Rysowanie sfer z RadialGradientBrush

enter image description here

obecnie używam:

private readonly Brush _whitePieceBrush = new RadialGradientBrush(Colors.Snow, Colors.Ivory); 
private readonly Brush _blackPieceBrush = new RadialGradientBrush(Colors.DarkGray, Colors.Black); 

... 

using (DrawingContext dc = _piecesVisual.RenderOpen()) 
{ 
    .... 
    Brush brush = piece.Value.IsBlack ? _blackPieceBrush : _whitePieceBrush; 
    var pen = new Pen(new SolidColorBrush(Colors.Black), 0.5); 
    dc.DrawEllipse(brush, pen, new Point(posX, posY), 15, 15); 
    ... 

} 

czarne kręgi wokół białych kawałków nie pomagają, ale z nich, to wygląda jeszcze gorzej. (Jeśli uda mi się znaleźć dobry sposób narysowania ich, który wygląda lepiej, będę go usuwać)

+0

wkręcić że wygląda zabawa chcę grać: D – RhysW

+2

gdy jest zrobione i złożone (jest to dla uni project), prawdopodobnie podniosę link do źródła i instalatora (link do głównego postu) –

+0

parafrazując Field of Dreams tutaj, ale "skompiluj to, a oni przyjdą" – RhysW

Odpowiedz

2

Próbowałem:

private readonly Brush _whitePieceBrush = new RadialGradientBrush() 
    { 
     GradientStops = new GradientStopCollection 
     { 

      new GradientStop(Colors.WhiteSmoke,0.3), 
      new GradientStop(Colors.LightGray, 1.0), 


     } 
    }; 
    private readonly Brush _whitePieceBorder = new SolidColorBrush(Colors.Silver); 

Board Picture


Biorąc porady Clemensa i posiadające je środkowa: Z nimi nieco poza centrum: myślę, że to pomaga czarny więcej niż białe, ale i poprawa

private static readonly Point _lightSource = new Point(0.3, 0.35); 

    private readonly Brush _blackPieceBrush = new RadialGradientBrush(Colors.DarkGray, Colors.Black) 
    { 
     GradientOrigin = _lightSource 
    }; 
    private readonly Brush _blackPieceBorder = new SolidColorBrush(Colors.Black); 

    private readonly Brush _whitePieceBrush = new RadialGradientBrush() 
    { 
     GradientOrigin = _lightSource, 
     GradientStops = new GradientStopCollection 
     { 

      new GradientStop(Colors.WhiteSmoke,0.3), 
      new GradientStop(Colors.LightGray, 1.0), 

     } 
    }; 
    private readonly Brush _whitePieceBorder = new SolidColorBrush(Colors.Silver); 

enter image description here

+0

Wygląda idealnie. Czy starałeś się również nieco zejść z centrum? – Clemens

+0

Tak, zrobiłem (właściwie natychmiast po przesłaniu pierwszego obrazu) –

12

Co powiesz na coś takiego. Punkt skupienia jest nieco poza centrum, co powoduje poprawę wrażenia przestrzennego.

enter image description here

<Ellipse Width="60" Height="60"> 
    <Ellipse.Fill> 
     <RadialGradientBrush GradientOrigin="0.3,0.3"> 
      <RadialGradientBrush.GradientStops> 
       <GradientStop Color="White" Offset="0"/> 
       <GradientStop Color="White" Offset="0.3"/> 
       <GradientStop Color="#FFF0F0F0" Offset="1"/> 
      </RadialGradientBrush.GradientStops> 
     </RadialGradientBrush> 
    </Ellipse.Fill> 
</Ellipse> 
+0

Z jakiegoś powodu nie wychodzi mi tak dobrze. Naprawdę oczywiste paski na moim komputerze –