static void FillRandomVectors(SharpDX.DataStream stream) { float maxTapMag = -1; for (uint i = 0; i < NUM_SAMPLES; i++) { float curr = m_filterKernel[i].Length(); maxTapMag = (float)System.Math.Max(maxTapMag, curr); } float maxTapMagInv = 1.0f / maxTapMag; float rsum = 0.0f; Vector4[] occluderPoints = new Vector4[NUM_SAMPLES]; Vector4[] occluderPointsFlipped = new Vector4[NUM_SAMPLES]; for (uint i = 0; i < NUM_SAMPLES; i++) { Vector2 tapOffs = new Vector2(m_filterKernel[i].X * maxTapMagInv, m_filterKernel[i].Y * maxTapMagInv); occluderPoints[i].X = tapOffs.X; occluderPoints[i].Y = tapOffs.Y; occluderPoints[i].Z = 0; occluderPoints[i].W = (float)System.Math.Sqrt(1 - tapOffs.X * tapOffs.X - tapOffs.Y * tapOffs.Y); rsum += occluderPoints[i].W; // occluderPointsFlipped[i].X = tapOffs.X; occluderPointsFlipped[i].Y = -tapOffs.Y; } var colorScale = 1.0f / (2 * rsum); colorScale *= Params.ColorScale; for (uint i = 0; i < NUM_SAMPLES; i++) { stream.Write(occluderPoints[i]); } for (uint i = 0; i < NUM_SAMPLES; i++) { stream.Write(occluderPointsFlipped[i]); } }