2012-05-10 14 views
8

Estoy tratando de dibujar piezas esféricas para un juego, en WPF. Las piezas se dibujan como Elipses con RadialGradientBrushs. Como puede ver a continuación, mis piezas negras se ven fantásticas, , pero es difícil conseguir que las blancas tengan alguna profundidad sin que se vean grises.Dibujando esferas con RadialGradientBrush

enter image description here

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

} 

Los círculos negros alrededor de las piezas blancas no ayudan, pero sin ellos, se ve aún peor. (Si puedo encontrar una buena manera de dibujarlos que se vea mejor, lo eliminaré)

+0

tornillo que se ve divertido quiero jugar: D – RhysW

+2

cuando se hace y presentado (que es para una proyecto uni), probablemente pondré un enlace a la fuente y el instalador (se enlazará con la publicación principal) –

+0

parafraseando Field of Dreams aquí pero "compilarlo, y ellos vendrán" – RhysW

Respuesta

2

me trataron:

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


Siguiendo el consejo de Clemens y para que estén fuera del centro: con ellos un poco fuera del centro: Creo que esto ayuda a que el negro más que el blanco, pero aún y mejora

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

Parece perfecta. ¿También trataste de hacerlo un poco descentrado? – Clemens

+0

Sí, lo hice (en realidad, inmediatamente después de cargar la primera imagen) –

12

¿Qué tal algo como lo siguiente? El punto focal está un poco descentrado, y creo que mejora la impresión espacial.

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

No sale tan bien para mí por alguna razón. Banda muy obvia, en mi computadora –