예제 #1
0
        private void DrawBullets()
        {
            if (bulletList.Count > 0)
            {
                VertexPointSprite[] spriteArray = new VertexPointSprite[bulletList.Count];
                for (int i = 0; i < bulletList.Count; i++)
                {
                    spriteArray[i] = new VertexPointSprite(bulletList[i].position, 50);
                }

                effect.CurrentTechnique = effect.Techniques["PointSprites"];
                Matrix worldMatrix = Matrix.Identity;
                effect.Parameters["xWorld"].SetValue(worldMatrix);
                effect.Parameters["xView"].SetValue(viewMatrix);
                effect.Parameters["xProjection"].SetValue(projectionMatrix);
                effect.Parameters["xTexture"].SetValue(bulletTexture);

                device.RenderState.PointSpriteEnable = true;
                device.RenderState.AlphaBlendEnable  = true;
                device.RenderState.SourceBlend       = Blend.One;
                device.RenderState.DestinationBlend  = Blend.One;
                effect.Begin();
                foreach (EffectPass pass in effect.CurrentTechnique.Passes)
                {
                    pass.Begin();
                    device.VertexDeclaration = pointSpriteVertexDeclaration;
                    device.DrawUserPrimitives(PrimitiveType.PointList, spriteArray, 0, spriteArray.Length);
                    pass.End();
                }
                effect.End();

                device.RenderState.PointSpriteEnable = false;
            }
            device.RenderState.AlphaBlendEnable = false;
        }
예제 #2
0
        private void DrawSun()
        {
            Vector3 camPos    = sim.UI.Camera.Position;
            float   sunHeight = sim.World.Lighting.SunVector.Y;

            sunPosition = new Vector3(camPos.X, sunHeight * 1500, camPos.Z + sim.World.Lighting.SunVector.Z * 1500);

            GraphicsDevice g = sim.GraphicsDevice;

            VertexPointSprite[] spriteArray = new VertexPointSprite[1];
            spriteArray[0] = new VertexPointSprite(sunPosition, 40);

            sunEffect.CurrentTechnique = sunEffect.Techniques["Sun"];
            sunEffect.Parameters["matWorld"].SetValue(Matrix.Identity);
            sunEffect.Parameters["tTexture"].SetValue(sunTexture);

            g.RenderState.PointSpriteEnable = true;
            g.RenderState.AlphaBlendEnable  = true;
            g.RenderState.SourceBlend       = Blend.SourceAlpha;
            g.RenderState.DestinationBlend  = Blend.DestinationAlpha;

            sunEffect.Begin();
            foreach (EffectPass pass in sunEffect.CurrentTechnique.Passes)
            {
                pass.Begin();
                g.VertexDeclaration = sunVertexDeclaration;
                g.DrawUserPrimitives(PrimitiveType.PointList, spriteArray, 0, spriteArray.Length);
                pass.End();
            }
            sunEffect.End();

            g.RenderState.PointSpriteEnable = false;
            g.RenderState.AlphaBlendEnable  = false;
            g.RenderState.SourceBlend       = Blend.SourceAlpha;
            g.RenderState.DestinationBlend  = Blend.InverseSourceAlpha;
        }
예제 #3
0
        public void Draw(GameTime gameTime, Camera camera)
        {
            float elapsedTime = (float)gameTime.ElapsedGameTime.TotalSeconds;



            effect.Parameters["view"].SetValue(camera.View);
            effect.Parameters["projection"].SetValue(camera.Projection);
            effect.Parameters["viewportHeight"].SetValue(device.Viewport.Height);
            effect.Parameters["modelTexture"].SetValue(texture);

            spriteArray_Count = -1;
            for (int i = 0; i < particle.Length; i++)
            {
                if (particle[i].isActive)
                {
                    spriteArray[++spriteArray_Count] = new VertexPointSprite(particle[i].position,
                                                                             particle[i].Scale * PointSize,
                                                                             particle[i].ParColor);
                }
            }

            if (spriteArray_Count <= 0)
            {
                return;
            }

            //  頂點格式宣告
            device.VertexDeclaration = pointSpriteVertexDeclaration;
            SetParticleRenderStates(device.RenderState);

            /*
             * device.RenderState.AlphaBlendEnable = true;
             * device.RenderState.SourceBlend = Blend.SourceAlpha;
             * device.RenderState.DestinationBlend = Blend.InverseSourceAlpha;
             * device.RenderState.AlphaTestEnable = true;
             * device.RenderState.AlphaFunction = CompareFunction.Greater;
             * device.RenderState.PointSize = 1000.0f;
             * device.RenderState.PointSizeMax = 10000.0f;
             * device.RenderState.PointSizeMin = 100.0f;
             * device.RenderState.DepthBufferEnable = true ;
             */
            effect.CurrentTechnique = effect.Techniques["PointSprites"];

            effect.Begin();
            foreach (EffectPass CurrentPass in effect.CurrentTechnique.Passes)
            {
                CurrentPass.Begin();

                device.DrawUserPrimitives(PrimitiveType.PointList,
                                          spriteArray,
                                          0,
                                          spriteArray_Count);
                CurrentPass.End();
            }
            effect.End();
            device.RenderState.DepthBufferEnable = true;
            device.RenderState.AlphaBlendEnable  = false;
            device.RenderState.AlphaTestEnable   = false;

            device.RenderState.PointSpriteEnable      = false;
            device.RenderState.DepthBufferWriteEnable = true;
        }
예제 #4
0
        private void DrawBullets()
        {
            if (bulletList.Count > 0)
            {
                VertexPointSprite[] spriteArray = new VertexPointSprite[bulletList.Count];
                for (int i = 0; i < bulletList.Count; i++)
                    spriteArray[i] = new VertexPointSprite(bulletList[i].position, 50);

                effect.CurrentTechnique = effect.Techniques["PointSprites"];
                Matrix worldMatrix = Matrix.Identity;
                effect.Parameters["xWorld"].SetValue(worldMatrix);
                effect.Parameters["xView"].SetValue(viewMatrix);
                effect.Parameters["xProjection"].SetValue(projectionMatrix);
                effect.Parameters["xTexture"].SetValue(bulletTexture);
                device.RenderState.AlphaBlendEnable = true;
                device.RenderState.SourceBlend = Blend.One;
                device.RenderState.DestinationBlend = Blend.One;

                device.RenderState.PointSpriteEnable = true;

                effect.Begin();
                foreach (EffectPass pass in effect.CurrentTechnique.Passes)
                {
                    pass.Begin();
                    device.VertexDeclaration = pointSpriteVertexDeclaration;
                    device.DrawUserPrimitives(PrimitiveType.PointList, spriteArray, 0, spriteArray.Length);
                    pass.End();
                }
                effect.End();

                device.RenderState.PointSpriteEnable = false;
                device.RenderState.AlphaBlendEnable = false;
            }
        }