public float CreateNoise(Vector3 point) { float noiseValue = noise.CreateNoise(point) + 1; return(noiseValue); }
/// <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); }