Example #1
0
 /// <summary>
 /// 光栅化
 /// </summary>
 public void Rasterization()
 {
     for (int i = 0; i < SrTriangles.Count; i++)
     {
         var fl = Rast(SrTriangles[i]);
         foreach (var frag in fl)
         {
             if (frag.z > zBuffer[frag.x, frag.y] && zBuffer[frag.x, frag.y] != 0)
             {
                 continue;
             }
             Color col = srShader.FragShader(frag.data);
             if (blend)
             {
                 Color t = frameBuffer.GetPixel(frag.x, frag.y);
                 float r = t.r * (1 - col.a) + col.r * col.a;
                 float g = t.g * (1 - col.a) + col.g * col.a;
                 float b = t.b * (1 - col.a) + col.b * col.a;
                 frameBuffer.SetPixel(frag.x, frag.y, new Color(r, g, b));
             }
             else
             {
                 frameBuffer.SetPixel(frag.x, frag.y, col);
             }
             zBuffer[frag.x, frag.y] = frag.z;
         }
     }
 }