8

WPF で、ゲーム用に球形のピースを描画しようとしています。ピースは、RadialGradientBrushs を使用して楕円として描画されます。以下に示すように、私の黒の作品は素晴らしく見えますが、白の作品をグレーに見せずに深みを持たせるのは困難です.

ここに画像の説明を入力

私は現在使用しています:

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

}

白い部分の周りの黒い円は役に立ちませんが、それらがないと、さらに悪く見えます. (見栄えの良い描き方が見つかれば削除します)

4

2 に答える 2

12

以下のようなものはどうでしょうか。焦点が少しずれているため、空間的な印象が向上します。

ここに画像の説明を入力

<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>
于 2012-05-10T14:45:42.520 に答える
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);

ボード画像


クレメンスのアドバイスを受けて、それらを中心から外してください: それらを少し中心から外してください: これ は白よりも黒の方が役立つと思いますが、それでも改善されます

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

ここに画像の説明を入力

于 2012-05-26T14:11:53.697 に答える