2012-05-10 17 views
8

Ich versuche, sphärische Stücke für ein Spiel in WPF zu zeichnen. Pieces sind Drawnns wie Elipses mit RadialGradientBrushs. Wie Sie unten sehen können, sehen meine schwarzen Teile fantastisch aus, aber es ist schwer, die weißen Tiefen zu bekommen, ohne dass sie grau aussehen.Zeichnungsbereiche mit RadialGradientBrush

enter image description here

Ich bin derzeit mit:

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); 
    ... 

} 

Die schwarzen Kreise um die weißen Figuren nicht helfen, sondern aus ihnen mit, sieht es noch schlimmer. (Wenn ich einen guten Weg finde, sie zu zeichnen, sieht das besser aus, werde ich es entfernen)

+0

schrauben, dass es Spaß sieht es ich spielen will: D – RhysW

+2

wenn es fertig ist und unterbreitet wurde (es ist für eine Uni-Projekt), werde ich wahrscheinlich einen Link zu der Quelle und dem Installer setzen (wird in den Hauptpost Link) –

+0

Feld der Träume hier zu paraphrasieren aber "Kompilieren Sie es, und sie werden kommen" – RhysW

Antwort

2

Ich habe versucht:

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


Unter Clemens' Beratung und sie aus der Mitte mit: Mit ihnen etwas aus der Mitte: Ich denke, das die schwarze mehr als das weiße hilft, aber nach wie vor und Verbesserung

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

Sieht perfekt aus. Hast du auch versucht, es etwas außermittig zu machen? – Clemens

+0

Ja, ich tat (eigentlich sofort nach dem Hochladen des ersten Bildes) –

12

Was ist mit etwas wie dem Folgenden. Der Brennpunkt ist etwas außermittig, was den räumlichen Eindruck verbessert.

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

Kommt aus irgendeinem Grund nicht so toll für mich heraus. Wirklich offensichtlich Banding, auf meinem Computer –