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