All pastes #221374 Raw Edit

rasterizer

public text v1 · immutable
#221374 ·published 2006-10-25 17:31 UTC
rendered paste body
            Generic.cPipelineElement3X<Vector3, Vector3>.ElementProcessor3X rasterizerProcessor = delegate(Vector3[] element)
            {
                Vector3 v1, v2, v3;
                if ((element[0].Y < element[1].Y) && (element[0].Y < element[2].Y))
                {
                    v1 = element[0];
                    if (element[1].Y < element[2].Y)
                    {
                        v2 = element[1];
                        v3 = element[2];
                    }
                    else
                    {
                        v2 = element[2];
                        v3 = element[1];
                    }
                }
                else if (element[1].Y < element[2].Y)
                {
                    v1 = element[1];
                    if (element[0].Y < element[2].Y)
                    {
                        v2 = element[0];
                        v3 = element[2];
                    }
                    else
                    {
                        v2 = element[2];
                        v3 = element[0];
                    }
                }
                else
                {
                    v1 = element[2];
                    if (element[1].Y < element[0].Y)
                    {
                        v2 = element[1];
                        v3 = element[0];
                    }
                    else
                    {
                        v2 = element[0];
                        v3 = element[1];
                    }
                }
                v1 = v1 * 200 + new Vector3(100, 100, 0.0f);
                v2 = v2 * 200 + new Vector3(100, 100, 0.0f);
                v3 = v3 * 200 + new Vector3(100, 100, 0.0f);

                int currY = (int)Math.Round(v1.Y);
                int goalY = (int)Math.Round(v2.Y);

                float factor1 = (v2.X - v1.X) / (v2.Y - v1.Y);
                float factor2 = (v3.X - v1.X) / (v3.Y - v1.Y);

                while (currY < goalY)
                {
                    int start = (int)(v1.X + ((float)currY - v1.Y) * factor1);
                    //Rasterizer.Output(new Vector3(start, currY, 0.0f));
                    int end = (int)(v1.X + ((float)currY - v1.Y) * factor2);
                    int count = start;
                    if (start < end)
                        while (count++ < end)
                            Rasterizer.Output(new Vector3(count, currY, 0.0f));
                    else if (end < start)
                        while (count-- > end)
                            Rasterizer.Output(new Vector3(count, currY, 0.0f));
                    currY++;
                }
                Rasterizer.Output(v1);
                Rasterizer.Output(v2);
                Rasterizer.Output(v3);
            };