예제 #1
0
        public Image render(Size screen, Math3D.Point3D point3D)
        {
            //Set the rotation values
            Bitmap   img = new Bitmap(screen.Width, screen.Height);
            Graphics g   = Graphics.FromImage(img);

            _matrix = new Pixel3D[screen.Width, screen.Height];
            var maxZ = 0D;

            foreach (var figure in figures)
            {
                figure.Polyhedron.RotateX = point3D.X;
                figure.Polyhedron.RotateY = point3D.Y;
                figure.Polyhedron.RotateZ = point3D.Z;
                var temp = figure.Polyhedron.Calculate(figure.DrawingOrigin, _matrix);
                if (temp > maxZ)
                {
                    maxZ = temp;
                }
            }

            for (int i = 0; i < screen.Width; i++)
            {
                for (int j = 0; j < screen.Height; j++)
                {
                    if (_matrix[i, j] != null)
                    {
                        g.DrawEllipse(new Pen(ControlPaint.Dark(_matrix[i, j].Color, (float)(_matrix[i, j].Z / 600)), 1), new Rectangle(i, j, 1, 1));
                    }
                }
            }
            g.Dispose(); //Clean-up
            return(img);
        }
예제 #2
0
        public static Surface[] Translate(Surface[] surfaces, Math3D.Point3D oldOrigin, Math3D.Point3D newOrigin)
        {
            foreach (var surface in surfaces)
            {
                surface.points = Math3D.Translate(surface.points, oldOrigin, newOrigin);
            }

            return(surfaces);
        }