예제 #1
0
        public void tobuf(ZBuffer zb)
        {
            int j = 0;

            for (int i = 0; i < trian.Count; i = i + 3)
            {
                TPoint3D p1 = new TPoint3D(WN[trian[i]].getx(), WN[trian[i]].gety(), WN[trian[i]].getz());
                TPoint3D p2 = new TPoint3D(WN[trian[i + 1]].getx(), WN[trian[i + 1]].gety(), WN[trian[i + 1]].getz());
                TPoint3D p3 = new TPoint3D(WN[trian[i + 2]].getx(), WN[trian[i + 2]].gety(), WN[trian[i + 2]].getz());

                Pen      o  = new Pen(penz[j]);
                Triangle t1 = new Triangle(p1, p2, p3, o);
                zb.PutTriangle(t1);
                j++;
            }
        }
예제 #2
0
        public TCube3D(string file_name)
        {
            String       str;
            StreamReader sr = new StreamReader(file_name);

            str = sr.ReadLine();
            while (str != null)
            {
                if (str.Length >= 1)
                {
                    if (str[0] == 'v')                    //если v то далее будем читать вершину кубика
                    {
                        int x, y, z;


                        x = Int16.Parse(sr.ReadLine());
                        y = Int16.Parse(sr.ReadLine());
                        z = Int16.Parse(sr.ReadLine());
                        TPoint3D point = new TPoint3D(x, y, z);
                        w.Add(point);
                        WN.Add(point);
                    }
                    if (str[0] == 'k')                    //если k то далее будем читать номера вершин по которым нужно нарисовать треугольник
                    {
                        int p1, p2, p3;
                        p1 = Int16.Parse(sr.ReadLine());
                        p2 = Int16.Parse(sr.ReadLine());
                        p3 = Int16.Parse(sr.ReadLine());

                        trian.Add(p1);
                        trian.Add(p2);
                        trian.Add(p3);
                    }
                }
                str = sr.ReadLine();
            }
            //close the file
            sr.Close();
            Random random = new Random();

            for (int i = 0; i < trian.Count / 3; i++)
            {
                penz.Add(Color.FromArgb(random.Next(250), random.Next(250), random.Next(250)));
            }
        }
예제 #3
0
        public void view_transformation(double LX, double LY, double LZ, double RRRX, double RRRY, double zoom)
        {
            //каждый кадр мы берём кубик который считали из файла и изменяем его по этим параметрам
            double KX1, KY1, KZ1;
            double KX2, KY2, KZ2;
            double KX3, KY3, KZ3;

            for (int i = 0; i < w.Count; i++)
            {            //берём по очереди все вершины кубика
                // умножаем на матрицу поворота X
                KX1 = w[i].getx();
                KY1 = w[i].gety() * Math.Cos(LX) + w[i].getz() * Math.Sin(LX);
                KZ1 = -w[i].gety() * Math.Sin(LX) + w[i].getz() * Math.Cos(LX);

                // умножаем на матрицу поворота Y
                KX2 = KX1 * Math.Cos(LY) - KZ1 * Math.Sin(LY);
                KY2 = KY1;
                KZ2 = KX1 * Math.Sin(LY) + KZ1 * Math.Cos(LY);

                // умножаем на матрицу поворота Z
                KX3 = KX2 * Math.Cos(LZ) + KY2 * Math.Sin(LZ);
                KY3 = -KX2 *Math.Sin(LZ) + KY2 * Math.Cos(LZ);

                KZ3 = KZ2;

                KX3 += RRRX;                // перемещаем кубик в просранстве
                KY3 += RRRY;

                KX3 *= zoom;                // изменяем размер
                KY3 *= zoom;
                KZ3 *= zoom;

                TPoint3D NN = new TPoint3D(KX3, KY3, KZ3);
                WN[i] = NN;
            }
        }
예제 #4
0
 public Triangle(TPoint3D p1, TPoint3D p2, TPoint3D p3, Pen c)
 {
     p[0]  = p1; p[1] = p2; p[2] = p3;
     color = c;
 }