void Completed() { Color3 mbColor = RgbPalette.GetColor(fTargetValue, dataSource.Maximum, dataSource.Minimum, dataSource.MissingValue); effect.SetValue("mbColor", new Vector4(mbColor.Red, mbColor.Green, mbColor.Blue, 1.0f)); primitiveCount = vertexList.Count / 3; if (primitiveCount > 0) { if (vb != null) { vb.Dispose(); } vb = new VertexBuffer(device, MetaballVertex.SizeInBytes * vertexList.Count, Usage.WriteOnly, MetaballVertex.Format, Pool.Default); using (DataStream ds = vb.Lock(0, 0, LockFlags.None)) { ds.WriteRange(vertexList.ToArray()); } vb.Unlock(); } shadowed = false; }
public void QuerieNewParticle(Vector3 position, Vector3 baseVelocity) { Vector3 velocity = new Vector3(baseVelocity.X, baseVelocity.Y, baseVelocity.Z); // Adjust the input velocity based on how much // this particle system wants to be affected by it. velocity *= settings.EmitterVelocitySensitivity; // Add in some random amount of horizontal velocity. float horizontalVelocity = MathHelper.Lerp(settings.MinHorizontalVelocity, settings.MaxHorizontalVelocity, (float)random.NextDouble()); double horizontalAngle = random.NextDouble() * 2.0 * (float)Math.PI; velocity.X += horizontalVelocity * (float)Math.Cos(horizontalAngle); velocity.Z += horizontalVelocity * (float)Math.Sin(horizontalAngle); // Add in some random amount of vertical velocity. velocity.Y += MathHelper.Lerp(settings.MinVerticalVelocity, settings.MaxVerticalVelocity, (float)random.NextDouble()); if (MathHelper.CheckPosition(position, dataSource.DisplayData, dataSource.MissingValue)) { this.particlesList.Add(new ParticleVertex(position, velocity, (int)RgbPalette.ColorARGB(RgbPalette.GetColor(MathHelper.GetValue(position, dataSource.DisplayData, dataSource.MissingValue), dataSource.Maximum, dataSource.Minimum, dataSource.MissingValue)), currentTime)); this.startPositions.Add(position); this.times.Add(currentTime); } //else //{ //this.particlesList.Add(new ParticleVertex(position, velocity, (int)RgbPalette.ColorARGB(new Color3(1,1,1)), currentTime)); //this.startPositions.Add(position); //} }
public WiredCube(Device device, Effect effect, float width, float height, float depth, Color3 cubeColor, Camera camera) { this.device = device; this.effect = effect; this.width = width; this.height = height; this.depth = depth; this.color = (int)RgbPalette.ColorARGB(cubeColor); this.camera = camera; world = Matrix.Identity; SetUpBuffers(); }
public override void Initialize() { if (effect == null) { effect = Effect.FromStream(device, this.GetType().Assembly.GetManifestResourceStream("DynamicDataDisplay.Visualization3D.Shaders.PerPixelLightning.fx"), ShaderFlags.None); } SetCamera(); vertexList = new List <MetaballVertex>(); Color3 mbColor = RgbPalette.GetColor(fTargetValue, dataSource.Maximum, dataSource.Minimum, dataSource.MissingValue); effect.SetValue("mbColor", new Vector4(mbColor.Red, mbColor.Green, mbColor.Blue, 1.0f)); MarchingCubes(); Completed(); base.Initialize(); }
private void GenerateTexture(double[,,] array) { int index = 0; byte[] buffer = new byte[4 * textureSizeX * textureSizeY * textureSizeZ]; for (int i = 0; i < textureSizeX; i++) { for (int j = 0; j < textureSizeY; j++) { for (int k = 0; k < textureSizeZ; k++) { float i1 = (float)(i * (float)(array.GetLength(0) - 1) / textureSizeX); float j1 = (float)(j * (float)(array.GetLength(1) - 1) / textureSizeY); float k1 = (float)(k * (float)(array.GetLength(2) - 1) / textureSizeZ); float value = MathHelper.GetValue(new Vector3(i1, j1, k1), array); byte[] color = RgbPalette.GetColorBytes(value, dataSource.Maximum, dataSource.Minimum, dataSource.MissingValue); if (value > dataSource.Maximum) { value = dataSource.Maximum; } if (value < dataSource.Minimum) { value = dataSource.Minimum; } buffer[index++] = color[3]; buffer[index++] = color[2]; buffer[index++] = color[1]; buffer[index++] = (byte)((value - dataSource.Minimum) / (dataSource.Maximum - dataSource.Minimum) * 255); } } } texture = new VolumeTexture(device, textureSizeX, textureSizeY, textureSizeZ, 1, Usage.Dynamic, Format.A8R8G8B8, Pool.Default); DataBox dbox = texture.LockBox(0, LockFlags.None); dbox.Data.WriteRange(buffer); texture.UnlockBox(0); }
public void Initialize() { if (effect == null) { effect = Effect.FromStream(device, this.GetType().Assembly.GetManifestResourceStream("Microsoft.Research.Visualization3D.Shaders.PerPixelLightning.fx"), ShaderFlags.None); } particles.Clear(); for (int i = 0; i < particleNum; i++) { Vector3 position = GeneratePosition(); while (float.IsNaN(position.X) || position.X - gradientStep < 0 || position.Y - gradientStep < 0 || position.Z - gradientStep < 0 || position.X + gradientStep > array.GetLength(0) - 1 || position.Y + gradientStep > array.GetLength(1) - 1 || position.Z + gradientStep > array.GetLength(2) - 1) { position = GeneratePosition(); } Vector3 backPosition = new Vector3(position.X - numericalStep, position.Y, position.Z); Vector3 frontPosition = new Vector3(position.X + numericalStep, position.Y, position.Z); float velocityX = MathHelper.GetPatrialDerivation(MathHelper.GetValue(frontPosition, array), MathHelper.GetValue(backPosition, array), numericalStep); Vector3 bottomPosition = new Vector3(position.X, position.Y - numericalStep, position.Z); Vector3 topPosition = new Vector3(position.X, position.Y + numericalStep, position.Z); float velocityY = MathHelper.GetPatrialDerivation(MathHelper.GetValue(topPosition, array), MathHelper.GetValue(bottomPosition, array), numericalStep); Vector3 rightPosition = new Vector3(position.X, position.Y, position.Z + numericalStep); Vector3 leftPosition = new Vector3(position.X, position.Y, position.Z - numericalStep); float velocityZ = MathHelper.GetPatrialDerivation(MathHelper.GetValue(rightPosition, array), MathHelper.GetValue(leftPosition, array), numericalStep); Vector3 velocity = new Vector3(velocityX, velocityY, velocityZ); velocity.Normalize(); this.particles.Add(new Particle(position, -velocity, RgbPalette.GetColor(MathHelper.GetValue(position, array), max, min, missingValue), (float)(r.NextDouble() * 100) + 50)); } SetUpBuffers(); SetCamera(); }
public override void Update(TimeEntity timeEntity) { currentTime = (float)timeEntity.TotalTime.TotalMilliseconds / 10000.0f; //if (particlesList.Count > settings.MaxParticles) // particlesList.Clear(); int oldCount = particlesList.Count; for (int i = 0; i < oldCount; i++) { Vector3 newPosition = ComputeNewPosition(startPositions[i], particlesList[i].Velocity, (currentTime - times[i]) * (1 + settings.DurationRandomness)); if (MathHelper.CheckPosition(newPosition, dataSource.DisplayData, dataSource.MissingValue) && (particlesList[i].Time < settings.Duration.TotalSeconds + times[i])) { float value = MathHelper.GetValue(newPosition, dataSource.DisplayData, dataSource.MissingValue); particlesList.Add(new ParticleVertex(newPosition, particlesList[i].Velocity, (int)RgbPalette.ColorARGB(RgbPalette.GetColor(value, dataSource.Maximum, dataSource.Minimum, dataSource.MissingValue)), particlesList[i].Time + (float)timeEntity.ElapsedTime.TotalSeconds)); startPositions.Add(startPositions[i]); times.Add(times[i]); } } particlesList.RemoveRange(0, oldCount); startPositions.RemoveRange(0, oldCount); times.RemoveRange(0, oldCount); if (particlesList.Count > 0) { if (vertexBuffer != null) { vertexBuffer.Dispose(); } vertexBuffer = new VertexBuffer(device, ParticleVertex.SizeInBytes * Math.Max(10, particlesList.Count), Usage.WriteOnly | Usage.Points, ParticleVertex.Format, Pool.Default); using (DataStream ds = vertexBuffer.Lock(0, 0, LockFlags.None)) { ds.WriteRange(particlesList.ToArray()); } vertexBuffer.Unlock(); } effect.SetValue("View", camera.ViewMatrix); effect.SetValue("Projection", camera.ProjectionMatrix); }
public void Update(float delta) { int result = 0; for (int i = 0; i < particles.Count; i++) { particles[i].LifeBar -= delta * 100; if (particles[i].LifeBar > 0) { result++; particles[i].Position.X += particles[i].Velocity.X; particles[i].Position.Y += particles[i].Velocity.Y; particles[i].Position.Z += particles[i].Velocity.Z; Vector3 position = particles[i].Position; //while (float.IsNaN(position.X) || particles[i].Position.X - gradientStep < 0 || particles[i].Position.Y - gradientStep < 0 || particles[i].Position.Z - gradientStep < 0 || particles[i].Position.X + gradientStep > array.GetLength(0) - 1 || particles[i].Position.Y + gradientStep > array.GetLength(1) - 1 || particles[i].Position.Z + gradientStep > array.GetLength(2) - 1 || MissingCheck(position)) //{ // particles[i].Position = GeneratePosition(); // position = particles[i].Position; //} Vector3 backPosition = new Vector3(position.X - numericalStep, position.Y, position.Z); Vector3 frontPosition = new Vector3(position.X + numericalStep, position.Y, position.Z); float velocityX = MathHelper.GetPatrialDerivation(MathHelper.GetValue(frontPosition, array), MathHelper.GetValue(backPosition, array), numericalStep); Vector3 bottomPosition = new Vector3(position.X, position.Y - numericalStep, position.Z); Vector3 topPosition = new Vector3(position.X, position.Y + numericalStep, position.Z); float velocityY = MathHelper.GetPatrialDerivation(MathHelper.GetValue(topPosition, array), MathHelper.GetValue(bottomPosition, array), numericalStep); Vector3 rightPosition = new Vector3(position.X, position.Y, position.Z + numericalStep); Vector3 leftPosition = new Vector3(position.X, position.Y, position.Z - numericalStep); float velocityZ = MathHelper.GetPatrialDerivation(MathHelper.GetValue(rightPosition, array), MathHelper.GetValue(leftPosition, array), numericalStep); Vector3 velocity = new Vector3(velocityX, velocityY, velocityZ); velocity.Normalize(); particles[i].Velocity = -velocity; particles[i].Color = RgbPalette.GetColor(MathHelper.GetValue(position, array), max, min, missingValue); } else { Vector3 position = GeneratePosition(); //while (float.IsNaN(position.X) || particles[i].Position.X - gradientStep < 0 || particles[i].Position.Y - gradientStep < 0 || particles[i].Position.Z - gradientStep < 0 || particles[i].Position.X + gradientStep > array.GetLength(0) - 1 || particles[i].Position.Y + gradientStep > array.GetLength(1) - 1 || particles[i].Position.Z + gradientStep > array.GetLength(2) - 1 || MissingCheck(position)) //{ // position = GeneratePosition(); //} Vector3 backPosition = new Vector3(position.X - numericalStep, position.Y, position.Z); Vector3 frontPosition = new Vector3(position.X + numericalStep, position.Y, position.Z); float velocityX = MathHelper.GetPatrialDerivation(MathHelper.GetValue(frontPosition, array), MathHelper.GetValue(backPosition, array), numericalStep); Vector3 bottomPosition = new Vector3(position.X, position.Y - numericalStep, position.Z); Vector3 topPosition = new Vector3(position.X, position.Y + numericalStep, position.Z); float velocityY = MathHelper.GetPatrialDerivation(MathHelper.GetValue(topPosition, array), MathHelper.GetValue(bottomPosition, array), numericalStep); Vector3 rightPosition = new Vector3(position.X, position.Y, position.Z + numericalStep); Vector3 leftPosition = new Vector3(position.X, position.Y, position.Z - numericalStep); float velocityZ = MathHelper.GetPatrialDerivation(MathHelper.GetValue(rightPosition, array), MathHelper.GetValue(leftPosition, array), numericalStep); Vector3 velocity = new Vector3(velocityX, velocityY, velocityZ); velocity.Normalize(); particles[i] = new Particle(position, -velocity, RgbPalette.GetColor(MathHelper.GetValue(position, array), max, min, missingValue), (float)(r.NextDouble() * 100) + 50); } } SetUpBuffers(); //SetCamera(); }