public void FillTriangle(Vertex v1, Vertex v2, Vertex v3)
        {
            Matrix4f screenSpaceTransform =
                new Matrix4f().InitScreenSpaceTransform(backBuffer.Width/2, backBuffer.Height/2);
            Vertex minYVert = v1.Transform(screenSpaceTransform).PerspectiveDivide();
             		    Vertex midYVert = v2.Transform(screenSpaceTransform).PerspectiveDivide();
             		    Vertex maxYVert = v3.Transform(screenSpaceTransform).PerspectiveDivide();

             		    if(maxYVert.GetY() < midYVert.GetY())
             		    {
             			    Vertex temp = maxYVert;
             			    maxYVert = midYVert;
             			    midYVert = temp;
             		    }

             		    if(midYVert.GetY() < minYVert.GetY())
             		    {
             			    Vertex temp = midYVert;
             			    midYVert = minYVert;
             			    minYVert = temp;
             		    }

             		    if(maxYVert.GetY() < midYVert.GetY())
             		    {
             			    Vertex temp = maxYVert;
             			    maxYVert = midYVert;
             			    midYVert = temp;
             		    }

             		    float area = minYVert.TriangleAreaTimes2(maxYVert, midYVert);
             		    int handedness = area >= 0 ? 1 : 0;

             		    ScanConvertTriangle(minYVert, midYVert, maxYVert, handedness);
             		    FillShape((int)minYVert.GetY(), (int)maxYVert.GetY());
        }
Exemple #2
0
        private void RenderGame()
        {
            target.BeginRender();
            target.Clear();

            rotCounter += (float)timeDelta;
            Matrix4f translation = new Matrix4f().InitTranslation(0.0f, 0.0f, 3.0f);
            Matrix4f rotation    = new Matrix4f().InitRotation(0.0f, rotCounter, 0.0f);
            Matrix4f transform   = projection.Mul(translation.Mul(rotation));

            target.FillTriangle(maxYVert.Transform(transform), midYVert.Transform(transform), minYVert.Transform(transform));

            target.EndRender();
            Refresh();
        }
Exemple #3
0
        public void FillTriangle(Vertex v1, Vertex v2, Vertex v3)
        {
            Matrix4f screenSpaceTransform =
                new Matrix4f().InitScreenSpaceTransform(backBuffer.Width / 2, backBuffer.Height / 2);
            Vertex minYVert = v1.Transform(screenSpaceTransform).PerspectiveDivide();
            Vertex midYVert = v2.Transform(screenSpaceTransform).PerspectiveDivide();
            Vertex maxYVert = v3.Transform(screenSpaceTransform).PerspectiveDivide();



            if (maxYVert.GetY() < midYVert.GetY())
            {
                Vertex temp = maxYVert;
                maxYVert = midYVert;
                midYVert = temp;
            }


            if (midYVert.GetY() < minYVert.GetY())
            {
                Vertex temp = midYVert;
                midYVert = minYVert;
                minYVert = temp;
            }


            if (maxYVert.GetY() < midYVert.GetY())
            {
                Vertex temp = maxYVert;
                maxYVert = midYVert;
                midYVert = temp;
            }


            float area       = minYVert.TriangleAreaTimes2(maxYVert, midYVert);
            int   handedness = area >= 0 ? 1 : 0;


            ScanConvertTriangle(minYVert, midYVert, maxYVert, handedness);
            FillShape((int)minYVert.GetY(), (int)maxYVert.GetY());
        }