使用RadialGradientBrush绘制球体

时间:2012-05-10 13:57:00

标签: c# wpf drawing gradient radial-gradients

我正在尝试在WPF中为游戏绘制球形棋子。 使用RadialGradientBrushs将片段绘制为Elipses。 正如你在下面看到的,我的黑色碎片看起来很棒, 但很难让白色的东西有任何深度,而不会让它们看起来像灰色。

enter image description here

我目前正在使用:

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

}

白色碎片周围的黑色圆圈无济于事,但是看起来更糟糕。 (如果我能找到一个好的方法来绘制它们看起来更好,我会删除它)

2 个答案:

答案 0 :(得分:12)

如下所示。焦点有点偏离中心,我发现它可以改善空间印象。

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>

答案 1 :(得分:2)

我试过了:

    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


采取克莱门斯的建议,让他们偏离中心: 他们有点偏离中心: 我认为这有助于黑人而不是白人,但仍然和改善

    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