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