WinForms上的手动着色

时间:2013-11-20 18:46:14

标签: c# winforms graphics 3d gdi+

我正在尝试创建一个简单的3D应用程序,允许用户创建一些3d数字并操纵它们:旋转,翻译等。

所以现在我想制作阴影,但是它计算了没有渐变的图形边框的颜色。所以它看起来有点异国情调。所以我可以计算顶点不同的亮度,但我不知道如何使用渐变来填充我的图形。例如,我有一个颜色相同但具有不同亮度值的三角形。那我应该怎么填写呢?

现在我画的是这样的:

    private static readonly float[,] Floats;
    static FillVisualizer()
    {
        Floats = BitmapHelper.GetBrightness(Resources.Shademap);
    }

    public override void Draw(Graphics graphics, VisualizableShape shape)
    {
        if (!shape.IsVisible)
            return;
        double x = shape.Normal.X*128 + 127;
        double y = shape.Normal.Y*128 + 127;
        var brightness = Floats[(int) x, (int) y]; 
        var color = Color.FromArgb(255, (int) (Pen.Color.R*brightness), (int) (Pen.Color.G*brightness), (int) (Pen.Color.B*brightness));
        graphics.FillPolygon(new SolidBrush(color), shape.Points.CastToPointF());
    }
this url

中选择

shademap和“magic constants”

所以我的造型上的所有顶点的亮度都是一样的,这就是为什么它在某些情况下看起来很糟糕的原因:

example

所以这里我使用的是FillPolygon,但它用一种颜色填充它,何时应该使用3(或4)个多边形点的亮度来填充它。

请告诉我,解决问题的最简单方法。


补充说:@bansi的图片,来自他网址的图片,我正在寻找。

image

所以我试着用它。我希望它会奏效。

0 个答案:

没有答案