public override void Init() { shadowInfo = new ShadowInfo(Position, this.Angles.Forward(), Resource.GetTexture("effects/flashlight.png"), 1.0f ); shadowInfo.Linear = 0.01f; cheapLight = new SpotLight(); cheapLight.Linear = 0.01f; ShadowTechnique.SetLights += new Action(ShadowTechnique_SetLights); AmbientIntensity = 0.0f; DiffuseIntensity = 1.0f; this.Enabled = true; this.ExpensiveShadows = true; this.ShouldDraw = false; }
public object?Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values?.Length != 4) { return(Binding.DoNothing); } if (values[0] is not double || values[1] is not double || values[2] is not ShadowDepth || values[3] is not ShadowEdges) { return(Binding.DoNothing); } double width = (double)values[0]; double height = (double)values[1]; if (double.IsNaN(width) || double.IsInfinity(width) || double.IsNaN(height) || double.IsInfinity(height)) { return(Binding.DoNothing); } DropShadowEffect?dropShadow = ShadowInfo.GetDropShadow((ShadowDepth)values[2]); if (dropShadow is null) { return(null); } ShadowEdges edges = (ShadowEdges)values[3]; double blurRadius = dropShadow.BlurRadius; var rect = new Rect(0, 0, width, height); if (edges.HasFlag(ShadowEdges.Left)) { rect = new Rect(rect.X - blurRadius, rect.Y, rect.Width + blurRadius, rect.Height); } if (edges.HasFlag(ShadowEdges.Top)) { rect = new Rect(rect.X, rect.Y - blurRadius, rect.Width, rect.Height + blurRadius); } if (edges.HasFlag(ShadowEdges.Right)) { rect = new Rect(rect.X, rect.Y, rect.Width + blurRadius, rect.Height); } if (edges.HasFlag(ShadowEdges.Bottom)) { rect = new Rect(rect.X, rect.Y, rect.Width, rect.Height + blurRadius); } var size = new GeometryDrawing(new SolidColorBrush(Colors.White), new Pen(), new RectangleGeometry(rect)); return(new DrawingBrush(size) { Stretch = Stretch.None, TileMode = TileMode.None, Viewport = rect, ViewportUnits = BrushMappingMode.Absolute, Viewbox = rect, ViewboxUnits = BrushMappingMode.Absolute }); }
public override DropShadowEffect?ConvertValue(ShadowDepth value, Type targetType, object parameter, CultureInfo culture) { return(Clone(ShadowInfo.GetDropShadow(value))); }
void CopyModel() { GameObject objShadow = new GameObject(); objShadow.transform.position = pos; objShadow.transform.rotation = quat; objShadow.transform.SetParent(null); ShadowModel shadowModel = new ShadowModel(); shadowModel.alpha = 1; SkinnedMeshRenderer[] msrChild = GetComponentsInChildren <SkinnedMeshRenderer>(); MeshRenderer[] mrChild = GetComponentsInChildren <MeshRenderer>(); Dictionary <Mesh, ShadowInfo> ShadowMesh = new Dictionary <Mesh, ShadowInfo>();//静态的mesh 武器挂载点要设置坐标 //objShadow.AddComponent<MeshRenderer>(); for (int i = 0; i < msrChild.Length; i++) { if (!msrChild[i].enabled) { continue; } Mesh ms = new Mesh(); msrChild[i].BakeMesh(ms); ShadowInfo info = new ShadowInfo(); List <Material> mat = new List <Material>(); for (int j = 0; j < msrChild[i].materials.Length; j++) { mat.Add(Instantiate(msrChild[i].materials[j])); } info.mat = mat.ToArray(); info.attach = msrChild[i].transform; info.normalMesh = false; ShadowMesh.Add(ms, info); } for (int i = 0; i < mrChild.Length; i++) { if (!mrChild[i].enabled) { continue; } Mesh ms = mrChild[i].GetComponent <MeshFilter>().mesh; ShadowInfo info = new ShadowInfo(); List <Material> mat = new List <Material>(); for (int j = 0; j < mrChild[i].materials.Length; j++) { mat.Add(Instantiate(mrChild[i].materials[j])); } info.mat = mat.ToArray(); info.attach = mrChild[i].transform; info.normalMesh = true; ShadowMesh.Add(ms, info); } foreach (var each in ShadowMesh) { GameObject subMesh = new GameObject(); subMesh.name = each.Value.attach.name; MeshFilter mf = subMesh.AddComponent <MeshFilter>(); mf.mesh = each.Key; MeshRenderer mr = subMesh.AddComponent <MeshRenderer>(); mr.materials = each.Value.mat; subMesh.transform.SetParent(objShadow.transform); if (each.Value.normalMesh) { subMesh.transform.rotation = each.Value.attach.transform.rotation; subMesh.transform.position = each.Value.attach.transform.position; } else { subMesh.transform.localPosition = Vector3.zero; subMesh.transform.localRotation = Quaternion.identity; } for (int i = 0; i < mr.materials.Length; i++) { mr.materials[i].SetFloat("_Alpha", alphaInitialize); mr.materials[i].SetColor("_TintColor", colorMul); } //mr.material.SetFloat("_Alpha", shadowModel.alpha); } shadowModel.shadowLast = shadowLast; copyedModel.Add(objShadow, shadowModel); }