internal void PrepareTextureForDrawDevice(IDrawDevice device) { System.Drawing.PointF[] points = new System.Drawing.PointF[_verticesPositions.Count]; /** * Drawing texture based on displacement for each camera **/ Vector3 start = _absoluteStart * device.GetScaleAtZ(_absoluteStart.Z); Vector3 end = _absoluteEnd * device.GetScaleAtZ(_absoluteEnd.Z); Vector2 tangent = (end - start).Xy; float length = tangent.Length; for (int i = 0; i < points.Length; i++) { points[i] = new System.Drawing.PointF(_verticesPositions[i].X * length, _verticesPositions[i].Y); } System.Drawing.Bitmap pixelData = new System.Drawing.Bitmap((int)MathF.Ceiling(length), (int)MathF.Ceiling(_sway2)); using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(pixelData)) { g.Clear(System.Drawing.Color.Transparent); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed; g.DrawLines(_pen, points); } if (!BatchInfos.ContainsKey(device)) { BatchInfo bi = new BatchInfo( DrawTechnique.Add, Colors.White, new ContentRef <Texture>( new Texture(new ContentRef <Pixmap>(new Pixmap())) { FilterMin = TextureMinFilter.LinearMipmapLinear, FilterMag = TextureMagFilter.LinearSharpenSgis, WrapX = TextureWrapMode.ClampToEdge, WrapY = TextureWrapMode.ClampToEdge, TexSizeMode = Texture.SizeMode.Stretch })); BatchInfos.Add(device, new BoltData() { BatchInfo = bi }); } BoltData bd = BatchInfos[device]; Texture tx = bd.BatchInfo.MainTexture.Res; tx.BasePixmap.Res.MainLayer.FromBitmap(pixelData); tx.ReloadData(); bd.Start = start; bd.End = end; bd.IsReady = true; }
//构造函数 public Bolt() { boltData = new BoltData(); utsMath = new BoltMath(); }