Exemplo n.º 1
0
 //vykresli model
 public void Draw(Soft3DScreen s)
 {
     foreach(TexturedTriangle t in triangles)
       {
     if(t != null)//jestlize nema texturu vykresli bez textury
     {
     if(t.Texture != null)
     s.DrawTexturedTriangle3d(t);
             else
             {
     s.ActualColor = t.MyColor;
     s.DrawFilledTriangle3d(t.V1.Transform(matrix),t.V2.Transform(matrix),
            t.V3.Transform(matrix));
             }
     }
     }
 }
Exemplo n.º 2
0
    /*

            // Create a new bitmap.
            Bitmap bmp = new Bitmap("c:\\fakePhoto.jpg");

            // Lock the bitmap's bits.
            Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
            System.Drawing.Imaging.BitmapData bmpData =
                bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
                bmp.PixelFormat);

            // Get the address of the first line.
            IntPtr ptr = bmpData.Scan0;

            // Declare an array to hold the bytes of the bitmap.
            int bytes  = Math.Abs(bmpData.Stride) * bmp.Height;
    ���         byte[] rgbValues = new byte[bytes];

            // Copy the RGB values into the array.
            System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);

            // Set every third value to 255. A 24bpp bitmap will look red.
            for (int counter = 2; counter < rgbValues.Length; counter += 3)
                rgbValues[counter] = 255;

            // Copy the RGB values back to the bitmap
            System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);

            // Unlock the bits.
            bmp.UnlockBits(bmpData);

            // Draw the modified image.
            e.Graphics.DrawImage(bmp, 0, 150);

      */
    /*private void FromBitmap(Bitmap b,Int32[,] pole){

      for(int i = 0;i<b.Width;i++)
            for(int j = 0;j<b.Height;j++){
        pole[i,j] = b.GetPixel(i,j).ToArgb();
        }
    }

    private unsafe Bitmap ToBitmap(Int32[,] pole){
        Bitmap b;
        fixed(int* pp = &pole[0,0])
         b= new Bitmap(pole.GetLength(1), pole.GetLength(0),pole.GetLength(1)*4, System.Drawing.Imaging.PixelFormat.Format32bppArgb,(IntPtr)pp);
        return b;
    }*/
    void OnPaint(object sender, PaintEventArgs e)
    {
        //= new Bitmap(e.ClipRectangle.Width, e.ClipRectangle.Height, e.Graphics);
        //MyUnion union;
        if((e.ClipRectangle.Height != oldy) || (e.ClipRectangle.Width != oldx))
        {
          pole = new Int32[e.ClipRectangle.Height,e.ClipRectangle.Width];
          oldx = e.ClipRectangle.Width; oldy = e.ClipRectangle.Height;
        }else{Array.Clear(pole, 0, pole.Length);}

        //byte[] bytes = new byte[b.Width*b.Height*4];

        //Int32[,] pole = new Int32[b.Width,b.Height];
        Soft3DScreen s = new Soft3DScreen(pole);
        Triangle3D t3;
        Triangle2D t2;

        s.ViewMatrix.Translate(0,0,-5);
        s.ViewMatrix.RotateX(rx);
        s.ViewMatrix.RotateY(ry);

        Vector2 texcoord1 = new Vector2(-1,-1);
        Vector2 texcoord2 = new Vector2(-1,1);
        Vector2 texcoord3 = new Vector2(1,-1);
        Vector3 v1 = new Vector3(-1,-1,-1);
        Vector3 v2 = new Vector3(-1,1,-1);
        Vector3 v3 = new Vector3(1,-1,-1);
        t3 = new Triangle3D(v1,v2,v3);
        t2 = new Triangle2D(texcoord1,texcoord2,texcoord3);
        TexturedTriangle ttriangle = new TexturedTriangle(t3,t2,texture);
        s.DrawTexturedTriangle3d(ttriangle);

        texcoord1.Set(-1,1);
        texcoord2.Set(1,1);
        texcoord3.Set(1,-1);
        v1.Set(-1,1,-1);
        v2.Set(1,1,-1);
        v3.Set(1,-1,-1);
           t3 = new Triangle3D(v1,v2,v3);
        t2 = new Triangle2D(texcoord1,texcoord2,texcoord3);
        ttriangle = new TexturedTriangle(t3,t2,texture);
        s.DrawTexturedTriangle3d(ttriangle);

         /*   s.ActualColor = Color.White.ToArgb();

        v1.Set(-1,1,1);
        v2.Set(1,1,1);
        v3.Set(1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        v1.Set(-1,1,1);
        v2.Set(-1,-1,1);
        v3.Set(1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        s.ActualColor = Color.Green.ToArgb();

        v1.Set(1,1,1);
        v2.Set(1,1,-1);
        v3.Set(1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        v1.Set(1,-1,-1);
        v2.Set(1,1,-1);
        v3.Set(1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        s.ActualColor = Color.Blue.ToArgb();

        v1.Set(-1,1,1);
        v2.Set(-1,1,-1);
        v3.Set(-1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);;

        v1.Set(-1,-1,-1);
        v2.Set(-1,1,-1);
        v3.Set(-1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        s.ActualColor = Color.Cyan.ToArgb();

        v1.Set(1,1,1);
        v2.Set(1,1,-1);
        v3.Set(-1,1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        v1.Set(-1,1,-1);
        v2.Set(-1,1,1);
        v3.Set(1,1,-1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        s.ActualColor = Color.Orange.ToArgb();

        v1.Set(1,-1,1);
        v2.Set(1,-1,-1);
        v3.Set(-1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        v1.Set(-1,-1,-1);
        v2.Set(1,-1,-1);
        v3.Set(-1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);*/

        Bitmap b = Soft3DBitmap.ToBitmap(pole);

        e.Graphics.DrawImageUnscaled(b, 0, 0);
          	//e.Graphics.DrawImageUnscaled(texture, 0, 0);
    }