//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)); } } } }
/* // 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); }