static void Main(string[] args) { using (var app = new BlurApp()) { app.Initialize(); app.Run(); } }
protected override Voxel mutate(Application app, Index pos, Action action, Voxel original) { BlurApp bApp = (BlurApp)app; BlurAction bAction = (BlurAction)action; float dis = Mathf.Sqrt(bAction.disSqr); float actualStrength = strength * (1 - (dis / bApp.radius)); if (actualStrength <= 0) { return(original); } byte newOpacity = calculateOpacity(bApp.original, pos.x - app.min.x, pos.y - app.min.y, pos.z - app.min.z, actualStrength); return(new Voxel(original.averageMaterialType(), newOpacity)); }
public override Application setup(Tree target) { float radius = worldRadius / target.voxelSize(); Vector3 radiusCube = new Vector3(radius, radius, radius); Vector3 center = target.transform.InverseTransformPoint(worldPosition) / target.voxelSize(); Vector3 exactMin = center - radiusCube; Vector3 exactMax = center + radiusCube; BlurApp app = new BlurApp(); app.tree = target; app.min = new Index(target.maxDetail, (uint)exactMin.x, (uint)exactMin.y, (uint)exactMin.z); app.max = new Index(target.maxDetail, (uint)exactMax.x, (uint)exactMax.y, (uint)exactMax.z); app.minRadius = radius - 1; app.maxRadius = radius + 1; app.position = center; app.radius = radius; app.setOriginal(target); return app; }
protected override Action checkMutation(Application app, Index pos) { BlurApp bApp = (BlurApp)app; BlurAction action = new BlurAction(); float voxelSize = LocalMutator.calculateVoxelSize(app, pos); Vector3 diff = LocalMutator.calculateDiff(bApp.position, pos, voxelSize); action.disSqr = diff.sqrMagnitude; float maxRadius = bApp.radius + voxelSize; float maxRadSqr = maxRadius * maxRadius; if (action.disSqr > maxRadSqr) { return(action); } action.doTraverse = true; action.modify = true; return(action); }
public override Application setup(Tree target) { float radius = worldRadius / target.voxelSize(); Vector3 radiusCube = new Vector3(radius, radius, radius); Vector3 center = target.transform.InverseTransformPoint(worldPosition) / target.voxelSize(); Vector3 exactMin = center - radiusCube; Vector3 exactMax = center + radiusCube; BlurApp app = new BlurApp(); app.tree = target; app.min = new Index(target.maxDetail, (uint)exactMin.x, (uint)exactMin.y, (uint)exactMin.z); app.max = new Index(target.maxDetail, (uint)exactMax.x, (uint)exactMax.y, (uint)exactMax.z); app.minRadius = radius - 1; app.maxRadius = radius + 1; app.position = center; app.radius = radius; app.setOriginal(target); return(app); }