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; }
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; }
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; }
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; } }