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;
        }
Esempio n. 2
0
        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();
        }
Esempio n. 4
0
        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();
        }
Esempio n. 7
0
        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();
        }