Isosurface.SimplexNoise.Noise C# (CSharp) Method

Noise() public static method

public static Noise ( float xin, float yin ) : float
xin float
yin float
return float
        public static float Noise(float xin, float yin)
        {
            float n0, n1, n2; // Noise contributions from the three corners
            // Skew the input space to determine which simplex cell we're in
            float F2 = 0.5f * ((float)Math.Sqrt(3.0f) - 1.0f);
            float s = (xin + yin) * F2; // Hairy factor for 2D
            int i = fastfloor(xin + s);
            int j = fastfloor(yin + s);
            float G2 = (3.0f - (float)Math.Sqrt(3.0f)) / 6.0f;
            float t = (i + j) * G2;
            float X0 = i - t; // Unskew the cell origin back to (x,y) space
            float Y0 = j - t;
            float x0 = xin - X0; // The x,y distances from the cell origin
            float y0 = yin - Y0;
            // For the 2D case, the simplex shape is an equilateral triangle.
            // Determine which simplex we are in.
            int i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords
            if (x0 > y0)
            {
                i1 = 1;
                j1 = 0;
            } // lower triangle, XY order: (0,0)->(1,0)->(1,1)
            else
            {
                i1 = 0;
                j1 = 1;
            } // upper triangle, YX order: (0,0)->(0,1)->(1,1)
            // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and
            // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where
            // c = (3-sqrt(3))/6
            float x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords
            float y1 = y0 - j1 + G2;
            float x2 = x0 - 1.0f + 2.0f * G2; // Offsets for last corner in (x,y) unskewed coords
            float y2 = y0 - 1.0f + 2.0f * G2;
            // Work out the hashed gradient indices of the three simplex corners
            int ii = i & 255;
            int jj = j & 255;
            int gi0 = perm[ii + perm[jj]] % 12;
            int gi1 = perm[ii + i1 + perm[jj + j1]] % 12;
            int gi2 = perm[ii + 1 + perm[jj + 1]] % 12;
            // Calculate the contribution from the three corners
            float t0 = 0.5f - x0 * x0 - y0 * y0;
            if (t0 < 0)
                n0 = 0.0f;
            else
            {
                t0 *= t0;
                n0 = t0 * t0 * dot(grad3[gi0], x0, y0); // (x,y) of grad3 used for 2D gradient
            }
            float t1 = 0.5f - x1 * x1 - y1 * y1;
            if (t1 < 0)
                n1 = 0.0f;
            else
            {
                t1 *= t1;
                n1 = t1 * t1 * dot(grad3[gi1], x1, y1);
            }
            float t2 = 0.5f - x2 * x2 - y2 * y2;
            if (t2 < 0)
                n2 = 0.0f;
            else
            {
                t2 *= t2;
                n2 = t2 * t2 * dot(grad3[gi2], x2, y2);
            }
            // Add contributions from each corner to get the final Noise value.
            // The result is scaled to return values in the interval [-1,1].
            return 70.0f * (n0 + n1 + n2);
        }

Same methods

SimplexNoise::Noise ( float xin, float yin, float zin ) : float
SimplexNoise::Noise ( float x, float y, float z, float w ) : float
SimplexNoise::Noise ( float x, float y, float z, float dx, float dy, float dz, float xyOffset, int octaves, float pers ) : float
SimplexNoise::Noise ( float x, float y, float z, int octaves, float pers = 0.5f ) : float

Usage Example

コード例 #1
0
ファイル: Game1.cs プロジェクト: z80/prototyping
        protected override void Initialize()
        {
            AdvancingFrontVIS2006.AdvancingFrontVIS2006.GetIdealEdgeLength(0, (Resolution / 2 - 2), 0);

            //DualMarchingSquaresNeilson.MarchingSquaresTableGenerator.PrintCaseTable();

            ModelIndex = -1;
            if (ModelIndex > -1)
            {
                Sampler.ReadData(Models[ModelIndex], Resolution);
            }

            float n = SimplexNoise.Noise(0, 0);

            RState          = new RasterizerState();
            RState.CullMode = (Sampler.ImageData != null ? CullMode.CullCounterClockwiseFace : CullMode.CullClockwiseFace);
            GraphicsDevice.RasterizerState     = RState;
            graphics.PreferredBackBufferWidth  = 1600;
            graphics.PreferredBackBufferHeight = 900;
            graphics.PreferMultiSampling       = true;
            graphics.ApplyChanges();

            IsMouseVisible = true;

            //effect = new BasicEffect(GraphicsDevice);
            reg_effect = Content.Load <Effect>("ShaderRegular");
            reg_effect.Parameters["ColorEnabled"].SetValue(true);
            dn_effect = Content.Load <Effect>("ShaderDN");
            dn_effect.Parameters["ColorEnabled"].SetValue(true);
            wire_effect = Content.Load <Effect>("WireShader");


            QualityIndex = 0;
            NextAlgorithm();

            //effect.VertexColorEnabled = true;

            Camera            = new Camera(GraphicsDevice, new Vector3(-Resolution, Resolution, -Resolution), 1f);
            Camera.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45), (float)graphics.PreferredBackBufferWidth / (float)graphics.PreferredBackBufferHeight, 0.1f, 1000.0f);
            if (SelectedAlgorithm.Is3D)
            {
                Camera.Update(true);
                //effect.View = Camera.View;
                reg_effect.Parameters["View"].SetValue(Camera.View);
                reg_effect.Parameters["Projection"].SetValue(Camera.Projection);
                dn_effect.Parameters["View"].SetValue(Camera.View);
                dn_effect.Parameters["Projection"].SetValue(Camera.Projection);
            }
            last_state = Keyboard.GetState();

            DrawMode      = Isosurface.DrawModes.Mesh;
            WireframeMode = WireframeModes.Fill;

            base.Initialize();
        }
All Usage Examples Of Isosurface.SimplexNoise::Noise