Как правильно раскрасить в C # GDI +? - PullRequest
0 голосов
/ 13 января 2019

У меня есть это задание, где мне нужно создать Вращающийся 3D-замок с Цветом, используя C # GDI +. Я забился и решил скачать уже собранную программу здесь: 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.
        }

Обе передние и задние грани в порядке, но при рендеринге сторон, верхней и нижней граней окраска выглядела следующим образом: Плохо окрашенная сторона Плохо окрашенный замок

Я пытался раскрасить куб, который шел с программой. Выход был похожим. Передние и задние лица были в порядке. Другие лица были плохими. Итак, я думаю, что проблема в коде, где я его скачал. Я уже пробовал использовать похожие программы GDI +, но это единственная программа, в которой вы можете вручную устанавливать вершины, ребра и грани. Я также не могу создать программу с нуля, потому что, честно говоря, у меня мало знаний о 3D-вещах.

1 Ответ

0 голосов
/ 12 февраля 2019

Попробуйте использовать сглаживающий режим SmoothingMode

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