All pastes #732008 Raw Edit

Vermischtes

public text v1 · immutable
·published 2007-10-10 16:08 UTC
rendered paste body
        void TransformToScreen(Polygon p)
        {
            Vector[] newPoints = new Vector[3];
            double r;
            for (int i = 0; i < p.Points.Length; i++)
            {
                r = (Cam.Distance) / (p.Points[i].Z - Cam.Location.Z);
                if (r > 1 || r <= 0) //muss noch in per pixel geändert werden
                {
                    for (int j = 0; j < p.Points.Length; j++)
                    {
                        newPoints[j] = new Vector(0, 0, 0);
                    }
                    break;
                }
                newPoints[i] = new Vector((int)((double)Cam.Location.X + r * (double)(p.Points[i].X - Cam.Location.X) + Width / 2), (int)((double)Cam.Location.Y + r * (double)(p.Points[i].Y - Cam.Location.Y) + Height / 2), (p.Points[i] - Cam.Location).Abs());//Math.Sqrt(Math.Pow(Cam.Location.x - p.Points[i].x, 2) + Math.Pow(Cam.Location.y - p.Points[i].y, 2) + Math.Pow(Cam.Location.z - p.Points[i].z, 2)));
            }
            p.TransformedPoints = newPoints;
        }

        public void DrawPolygon(Polygon p, Graphics g)
        {
                if (Wireframe)
                    g.DrawPolygon(new Pen(Brushes.Black), p.Points2D());
                else
                {
                    double v;
                    double w;
                    p.Depth = new double[Width, Height];
                    int MinX = (int)Math.Max(0, Math.Min(p.TransformedPoints[0].X, Math.Min(p.TransformedPoints[1].X, p.TransformedPoints[2].X)));
                    int MinY = (int)Math.Max(0, Math.Min(p.TransformedPoints[0].Y, Math.Min(p.TransformedPoints[1].Y, p.TransformedPoints[2].Y)));
                    int MaxX = (int)Math.Min(Width, Math.Max(p.TransformedPoints[0].X, Math.Max(p.TransformedPoints[1].X, p.TransformedPoints[2].X)));
                    int MaxY = (int)Math.Min(Height, Math.Max(p.TransformedPoints[0].Y, Math.Max(p.TransformedPoints[1].Y, p.TransformedPoints[2].Y)));
                    if (MaxX > MinX && MaxY > MinY)
                    {
                        BufferTest = new Bitmap(MaxX - MinX, MaxY - MinY);
                        Graphics BufferGraphics = Graphics.FromImage(BufferTest);
                        BufferGraphics.FillPolygon(Brushes.White, p.Points2D(MinX, MinY));
                        for (int x = MinX; x < MaxX; x++)
                        {
                            for (int y = MinY; y < MaxY; y++)
                            {
                                //MessageBox.Show("x: " + x + "y: " + y + "Color: " + BufferTest.GetPixel(x - MinX, y - MinY).ToString());
                                if (BufferTest.GetPixel(x - MinX, y - MinY).A == 255)//(p.TransformedPoints[1].X - p.TransformedPoints[0].X) != 0 && ((p.TransformedPoints[1].Y - p.TransformedPoints[0].Y) * (p.TransformedPoints[1].X - p.TransformedPoints[0].X) - (p.TransformedPoints[2].X - p.TransformedPoints[0].X) * (p.TransformedPoints[2].Y - p.TransformedPoints[0].Y)) != 0)
                                {
                                    w = (double)((y - p.TransformedPoints[0].Y) * (p.TransformedPoints[1].X - p.TransformedPoints[0].X) - (x - p.TransformedPoints[0].X) * (p.TransformedPoints[2].Y - p.TransformedPoints[0].Y)) / (double)((p.TransformedPoints[1].Y - p.TransformedPoints[0].Y) * (p.TransformedPoints[1].X - p.TransformedPoints[0].X) - (p.TransformedPoints[2].X - p.TransformedPoints[0].X) * (p.TransformedPoints[2].Y - p.TransformedPoints[0].Y));
                                    v = (double)(x - p.TransformedPoints[0].X - w * (p.TransformedPoints[2].X - p.TransformedPoints[0].X)) / (double)(p.TransformedPoints[1].X - p.TransformedPoints[0].X);
                                    double z = v * (double)(p.TransformedPoints[1].Z - p.TransformedPoints[0].Z) + w * (double)(p.TransformedPoints[2].Z - p.TransformedPoints[0].Z);
                                    //MessageBox.Show("x: " + x + " y: " + y + "\nv: " + v * (double)(p.TransformedPoints[1].Z - p.TransformedPoints[0].Z) + " w: " + w * (double)(p.TransformedPoints[2].Z - p.TransformedPoints[0].Z) + " z: " + z);
                                    //MessageBox.Show("z: " + z);
                                    if (Buffer[x, y] > z)
                                    {
                                        Main.SetPixel(x, y, p.Color);
                                        BufferTest.SetPixel(x - MinX, y - MinY, Buffer[x, y] - z > 255 ? Color.Black : Color.FromArgb((int)(Buffer[x, y] - z), 255, 0, 0));
                                        Buffer[x, y] = z;
                                    }
                                }
                            }
                        }
                        /*f.pictureBox1.Image = Main;
                        f.pictureBox1.Invalidate();
                        f.pictureBox2.Image = BufferTest;
                        f.pictureBox2.Invalidate();
                        MessageBox.Show("bla");*/
                        Testg.DrawImage(BufferTest, lastx, 0);
                        lastx = MaxX - MinX;
                        f.pictureBox2.Image = TestList;
                    }
                }
        }