【问题标题】:How to properly color in C# GDI+?如何在 C# GDI+ 中正确着色?
【发布时间】:2019-01-13 08:33:01
【问题描述】:

我有这个任务,我需要使用 C# GDI+ 创建一个带有颜色的旋转 3D 城堡。 我死记硬背,决定在这里下载一个已经构建好的程序: https://code.msdn.microsoft.com/windowsdesktop/3D-Modeling-using-GDI-b93937b9

我用我的顶点、边和面替换了 VectorShape.cs 中的形状。 此外,我还添加了一些额外的代码来使形状着色。

for (int i = 0; i < 6; i++)
        {
            Point[] point2D = new Point[m_face[i].Length]; //I added this
            //iterate each edges in that face
            for (int j = 0; j < m_face[i].Length; j++)
            {

                int k=m_face[i][j];

                GraphicsState _s1 = g.Save();
                GraphicsContainer a = g.BeginContainer();
                Point3d p1 =m_vertex[m_edges[k][0]];
                Point3d p2 = m_vertex[m_edges[k][1]];
                double[] _p1 = ProjMatrix.ApplyTransform(p1.X,p1.Y,p1.Z, 1);
                double[] _p2 = ProjMatrix.ApplyTransform(p2.X, p2.Y, p2.Z, 1);
                P1.X = (int)_p1[0]; P1.Y = -(int)_p1[1];
                P2.X = (int)_p2[0]; P2.Y = -(int)_p2[1];

                point2D[j].X = P2.X; //I added this
                point2D[j].Y = P2.Y; //I added this
                g.DrawLine(m_pen,P1, P2);
                g.ResetTransform();
                g.EndContainer(a); 
                g.Restore(_s1);
            }
            g.FillPolygon(Brushes.Gray, point2D); //I added this.
        }

正面和背面都可以,但是在渲染侧面、顶面和底面时,颜色看起来像这样: Badly Colored SideBadly Colored Castle

我尝试为程序附带的立方体着色。输出是相似的。正面和背面都还好。其他的脸色都不好。所以,我认为问题在于我下载它的代码。我已经尝试过使用类似的 GDI+ 程序,但这是唯一可以手动放置顶点、边和面的程序。老实说,我也无法从头开始构建程序,因为我对 3D 东西知之甚少。

【问题讨论】:

  • 你是在同一个方向构建多边形吗?所以看前面,它总是顺时针构建的?通过检查顺时针或逆时针堆积来完成正面和背面的确定Curve orientation
  • 看起来侧面/面没有正确分开。不过,代码似乎还可以。试试这个:为每张脸使用不同的颜色,看看这些错误部分是在哪里创建的。
  • @TaW 如果我不明白,请原谅我,但我试过了,错误的部分来自脸部本身。
  • @J. van Langen 我真的不知道多边形的构建方向,但似乎正面和背面是在同一方向构建的。
  • @Emeraldsrs他们应该是相反的。因为画背面是没用的。一个应该是灰色的,另一个应该是白色的。

标签: c# colors 3d gdi+


【解决方案1】:

尝试使用抗锯齿平滑模式

mygraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

【讨论】:

    猜你喜欢
    • 2020-02-07
    • 1970-01-01
    • 2012-01-18
    • 2013-04-06
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多