8 Stimmen

Zeichnen von Kugeln mit RadialGradientBrush

Ich versuche, kugelförmige Stücke für ein Spiel, in WPF zu zeichnen. Pieces sind als Elipsen mit RadialGradientBrushs gezeichnet. Wie Sie unten sehen können, sehen meine schwarzen Figuren fantastisch aus, aber es ist schwer, die weißen Figuren mit einer Tiefe zu bekommen, ohne sie grau aussehen zu lassen.

enter image description here

Ich benutze derzeit:

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 Teile sind nicht hilfreich, aber ohne sie sieht es noch schlimmer aus. (Wenn ich eine gute Möglichkeit finde, sie zu zeichnen, die besser aussieht, werde ich sie entfernen)

12voto

Clemens Punkte 118983

Wie wäre es mit etwas wie dem Folgenden? Der Brennpunkt liegt etwas außerhalb der Mitte, was meiner Meinung nach 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>

2voto

Frames Catherine White Punkte 25693

Ich habe es 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


Ich habe Clemens' Rat befolgt und sie aus der Mitte genommen: Mit ihnen ein wenig aus der Mitte: Ich denke, das hilft dem Schwarzen mehr als dem Weißen, ist aber dennoch eine 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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X