Ejemplo n.º 1
0
    public float CreateNoise(Vector3 point)
    {
        float noiseValue = noise.CreateNoise(point) + 1;

        return(noiseValue);
    }
Ejemplo n.º 2
0
        /// <summary>
        /// Lance le calcul de génération d'une grille de planète.
        /// </summary>
        /// <param name="planetPosition"></param>
        /// <param name="planetRadius"></param>
        /// <param name="gridSize"></param>
        /// <param name="noiseLow"></param>
        /// <param name="noiseHigh"></param>
        /// <param name="repartitionNoise"></param>
        /// <param name="world"></param>
        /// <param name="initialGridPos"></param>
        /// <param name="gridLevelScale"></param>
        public void RunCalculation(Vector3 planetPosition, float planetRadius, int gridSize, Noise.NoiseMapGenerator.NoiseParameters noiseLow, Noise.NoiseMapGenerator.NoiseParameters noiseHigh, 
            Noise.NoiseMapGenerator.NoiseParameters repartitionNoise, Matrix world, Vector2 initialGridPos, float gridLevelScale)
        {
            if (m_isComputing)
                throw new NotImplementedException();

            m_planetPosition = planetPosition;
            m_planetRadius = planetRadius;
            m_gridSize = gridSize;

            IsRessourceReady = false;
            System.Threading.Thread.CurrentThread.Priority = ThreadPriority.Highest;
            Thread thread = new Thread(() =>
            {
                m_isComputing = true;
                System.Threading.Thread.CurrentThread.Priority = ThreadPriority.Normal;
                var low = noiseLow.CreateNoise();
                var high = noiseHigh.CreateNoise();
                var rep = repartitionNoise.CreateNoise();
                BoundingBox aabb;
                Generation.ChunkAltitude altitude;
                Buffer vertexBuffer;
                Generation.ModelGenerator.GeneratePlanet(planetPosition,
                    planetRadius,
                    gridSize,
                    initialGridPos,
                    gridLevelScale,
                    low, high, rep, // bruits
                    out vertexBuffer,
                    out aabb,
                    out altitude);

                // Si on abort la tâche.
                Ressource = new Rsc()
                {
                    VertexBuffer = vertexBuffer,
                    Box = aabb,
                    Altitude = altitude
                };
                IsRessourceReady = true;
                m_isComputing = false;
                m_currentThread = null;

                if(m_isAborted)
                {
                    Ressource.Dispose();
                    IsRessourceReady = false;
                }
            });
            m_currentThread = thread;
            Scene.Instance.ThreadPool.AddThread(thread);
        }