public static Mesh Create(CloudShape shape, float diameter = 1, int vertexCount = 300000) { var vertices = new Vector3Buffer(vertexCount); var normals = new Vector3Buffer(vertexCount); var texCoords = new Vector2Buffer(vertices.Length); for (int i = 0; i < vertices.Length; i++) { Vector3 point; switch (shape) { case CloudShape.Sphere: point = RandomF.InsideUnitSphere(); break; case CloudShape.Cube: point = RandomF.InsideUnitCube(); break; default: throw new InvalidOperationException(); } vertices[i] = point * diameter; normals[i] = point.Normalized; texCoords[i] = new Vector2(vertices[i].X + 0.5f, -vertices[i].Y + 0.5f); } var result = new Mesh() { Vertices = vertices, TexCoords = texCoords, Normals = normals, Type = PrimitiveType.Points }; result.CalculateBounds(); return(result); }
private void InitBufferValues() { for (int i = 0; i < MaxParticles; i++) { _particlePositions[i] = RandomF.InsideUnitSphere(); var color = RandomF.InsideUnitCube(); var maxColor = MathF.Max(color.X, color.Y, color.Z); color /= maxColor; _particleColors[i] = new Vector4(color, 1); _particleData1[i] = new Vector4(50, 0, 0, 0); _particleData2[i] = new Vector4(0); _particleData3[i] = new Vector4(0); } var data = _computeData.Data; data.CurrentParticles = MaxParticles; data.MaxParticles = MaxParticles; data.Time = 0; data.DeltaTime = 0; _computeData.Data = data; }