Beispiel #1
0
        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]);
            }
        }