【问题标题】:Drawing Spheres with RadialGradientBrush使用 RadialGradientBrush 绘制球体
【发布时间】:2012-05-19 02:48:18
【问题描述】:

我正在尝试在 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);
    ...

}

白色块周围的黑色圆圈没有帮助,但没有它们,它看起来更糟。 (如果我能找到更好的方法来绘制它们看起来更好,我会删除它)

【问题讨论】:

  • 拧它看起来很有趣我想玩它:D
  • 完成并提交后(用于 uni 项目),我可能会提供指向源和安装程序的链接(将链接到主帖)
  • 在这里解释梦想的领域,但“编译它,他们就会来”
  • 环顾我的办公室,我注意到大多数有深度的白色物体(即所有真实的物体)看起来都是灰色的。始终保持白色的部分似乎并没有深度(从颜色来看——显然我可以从透视等方面辨别出来)。
  • 是的,肯定需要一些灰色,但到目前为止,我对 Colors.Silver 的实验使它变得太灰了。我认为这完全取决于您如何定义色点

标签: c# wpf drawing gradient radial-gradients


【解决方案1】:

下面这样的事情呢。焦点有点偏离中心,我发现这改善了空间印象。

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

【讨论】:

  • 出于某种原因对我来说并不是那么好。非常明显的条纹,在我的电脑上
【解决方案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);


采纳 Clemens 的建议并让他们偏离中心: 他们有点偏离中心: 我认为这对黑人的帮助大于对白人的帮助,但仍然有所改善

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

【讨论】:

  • 看起来很完美。你是否也试着让它有点偏离中心?
  • 是的(实际上是在上传第一张图片后立即)
猜你喜欢
  • 2016-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多