コード例 #1
0
        private void InitBillboard()
        {
            fBillboardChanged = false;
            if (fBillboard == null)
            {
                fBillboard = new Billboard(GraphicsDevice);
            }
            else
            {
                fBillboard.Clear();
            }
            fBillboard.UseVertexBuffer = fUseVertexBuffer;

            foreach (MyPoint point in fPoints)
            {
                Color   color     = Color.White;
                Vector3 direction = point.Direction;
                int     r         = (byte)(128 + 127 * direction.X);
                int     g         = (byte)(128 + 127 * direction.Y);
                int     b         = (byte)(128 + 127 * direction.Z);
                color = new Color(r, g, b, 255);

                fBillboard.AddObject(point.Position, color, point.Size);
            }
        }
コード例 #2
0
ファイル: FamilyEngine.cs プロジェクト: Warnestam/MonoGUI
        private void InitBillboard()
        {
            if (fBillboard1 == null)
            {
                fBillboard1 = new Billboard(GraphicsDevice);
                fBillboard2 = new Billboard(GraphicsDevice);
                fBillboard3 = new Billboard(GraphicsDevice);
            }
            else
            {
                fBillboard1.Clear();
                fBillboard2.Clear();
                fBillboard3.Clear();
            }
            fBillboard1.Mode = fBillboard2.Mode = fBillboard3.Mode = fDrawMode;

            foreach (MyPoint point in fPoints)
            {
                Color color = Color.White;
                switch (point.TextureIndex)
                {
                case 0:
                    fBillboard1.AddObject(point.Position, color, point.Size);
                    break;

                case 1:
                    fBillboard2.AddObject(point.Position, color, point.Size);
                    break;

                case 2:
                    fBillboard3.AddObject(point.Position, color, point.Size);
                    break;
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Allows the game component to draw itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Draw(GameTime gameTime)
        {
            Dictionary <Texture2D, Billboard> billboards = new Dictionary <Texture2D, Billboard>();

            foreach (Particle particle in fParticles)
            {
                Texture2D texture = particle.Texture;
                if (texture == null)
                {
                    SetParticleTexture(particle);
                    texture = particle.Texture;
                }
                if (!billboards.ContainsKey(texture))
                {
                    billboards.Add(texture, new Billboard(GraphicsDevice));
                }
                Billboard billboard = billboards[texture];
                billboard.AddObject(
                    new Vector3(particle.Position.X, particle.Position.Y, 0),
                    Color.White, particle.Size);
            }
            //--------------------
            GraphicsDevice.BlendState        = fBlendState;
            GraphicsDevice.DepthStencilState = DepthStencilState.None;
            Matrix vp = fCamera.Camera.ViewMatrix * fCamera.Camera.ProjectionMatrix;

            fShader.Parameters["world"].SetValue(fCamera.Camera.WorldMatrix);
            fShader.Parameters["vp"].SetValue(vp);
            int i = 0;

            foreach (KeyValuePair <Texture2D, Billboard> kvp in billboards)
            {
                fShader.Parameters["particleTexture"].SetValue(kvp.Key);
                for (int ps = 0; ps < fShader.CurrentTechnique.Passes.Count; ps++)
                {
                    fShader.CurrentTechnique.Passes[ps].Apply();
                    kvp.Value.Render();
                }
                i++;
            }
            //--------------------
            base.Draw(gameTime);
        }