示例#1
0
 static void Main(string[] args)
 {
     using (var app = new BlurApp())
     {
         app.Initialize();
         app.Run();
     }
 }
示例#2
0
        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));
        }
示例#3
0
		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;
		}
示例#4
0
        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);
        }
示例#5
0
        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);
        }