2012-05-10 8 views
8

Sto cercando di disegnare elementi sferici per un gioco, in WPF. I pezzi sono disegnati come Elipses con RadialGradientBrushs. Come potete vedere qui sotto, i miei pezzi neri sembrano fantastici, ma è difficile ottenere quelli bianchi che hanno una profondità senza farli sembrare grigi.con RadialGradientBrush

enter image description here

Attualmente sto usando:

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

} 

I cerchi neri intorno i pezzi bianchi non aiutano, ma senza di loro, sembra anche peggio. (Se riesco a trovare un buon modo per disegnarli che sembra migliore, lo rimuoverò)

+0

vite che sembra divertente voglio giocare: D – RhysW

+2

quando si è fatto e presentato (lo è per un progetto uni), probabilmente metto un link alla fonte e l'installer (si collegherà al post principale) –

+0

parafrasando Field of Dreams qui ma "Compila, e loro verranno" – RhysW

risposta

2

ho provato:

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


Prendendo consiglio Clemens' e di farle fuori centro: Con loro un po 'fuori centro: Credo che questo aiuta il nero più del bianco, ma ancora e di miglioramento

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

Sembra perfetto. Hai provato anche a renderlo un po 'fuori centro? – Clemens

+0

Sì, l'ho fatto (in realtà subito dopo aver caricato la prima immagine) –

12

Che dire qualcosa come il seguente. Il punto focale è un po 'fuori centro, che trovo migliora l'impressione spaziale.

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

Non viene fuori così bene per me per qualche motivo. Banding davvero evidente, sul mio computer –