protected override void BuildSphereAndGeometryNodes(ComponentManifest manifest, SceneNode parent) { BoundingSphere bound = new BoundingSphere(); bound.Center = Vector3.Up; bound.Radius = SlagMath.SQRT_2 * 1.25f; // Billboards can be randomly enlarged and waving back and forth, so expand the bound by 25%. ExplicitBoundingSphereNode meshBound = new ExplicitBoundingSphereNode(bound); parent.AddChild(meshBound); // Create the default material EffectApplication defaultMaterial = new EffectApplication(Effect, Skelemator.RenderStatePresets.Default); defaultMaterial.AddParamSetter(new CommonParamSetter()); defaultMaterial.AddParamSetter(new FogParamSetter()); defaultMaterial.AddParamSetter(new BillboardParamSetter(true, delegate() { return(mCurrentTime); })); EffectApplication defaultFringeMaterial = new EffectApplication(Effect, Skelemator.RenderStatePresets.AlphaBlendNPM); defaultFringeMaterial.AddParamSetter(new CommonParamSetter()); defaultFringeMaterial.AddParamSetter(new FogParamSetter()); defaultFringeMaterial.AddParamSetter(new BillboardParamSetter(false, delegate() { return(mCurrentTime); })); AlphaCutoutGeometryNode geometry = new AlphaCutoutGeometryNode(mGeometry, defaultMaterial, defaultFringeMaterial); meshBound.AddChild(geometry); EffectApplication depthMaterial = new EffectApplication(mDepthOnlyEffect, Skelemator.RenderStatePresets.Default); depthMaterial.AddParamSetter(new CommonParamSetter()); depthMaterial.AddParamSetter(new BillboardParamSetter(true, delegate() { return(mCurrentTime); })); geometry.AddMaterial(TraversalContext.MaterialFlags.ShadowMap, null); geometry.AddFringeMaterial(TraversalContext.MaterialFlags.ShadowMap, null); }
protected override void BuildSphereAndGeometryNodes(ComponentManifest manifest, SceneNode parent) { BoundingSphere bound = new BoundingSphere(); bound.Center = Vector3.Up; bound.Radius = SlagMath.SQRT_2 * 1.25f; // Billboards can be randomly enlarged and waving back and forth, so expand the bound by 25%. ExplicitBoundingSphereNode meshBound = new ExplicitBoundingSphereNode(bound); parent.AddChild(meshBound); // Create the default material EffectApplication defaultMaterial = new EffectApplication(Effect, Skelemator.RenderStatePresets.Default); defaultMaterial.AddParamSetter(new CommonParamSetter()); defaultMaterial.AddParamSetter(new FogParamSetter()); defaultMaterial.AddParamSetter(new BillboardParamSetter(true, delegate() { return mCurrentTime; })); EffectApplication defaultFringeMaterial = new EffectApplication(Effect, Skelemator.RenderStatePresets.AlphaBlendNPM); defaultFringeMaterial.AddParamSetter(new CommonParamSetter()); defaultFringeMaterial.AddParamSetter(new FogParamSetter()); defaultFringeMaterial.AddParamSetter(new BillboardParamSetter(false, delegate() { return mCurrentTime; })); AlphaCutoutGeometryNode geometry = new AlphaCutoutGeometryNode(mGeometry, defaultMaterial, defaultFringeMaterial); meshBound.AddChild(geometry); EffectApplication depthMaterial = new EffectApplication(mDepthOnlyEffect, Skelemator.RenderStatePresets.Default); depthMaterial.AddParamSetter(new CommonParamSetter()); depthMaterial.AddParamSetter(new BillboardParamSetter(true, delegate() { return mCurrentTime; })); geometry.AddMaterial(TraversalContext.MaterialFlags.ShadowMap, null); geometry.AddFringeMaterial(TraversalContext.MaterialFlags.ShadowMap, null); }