public Vector3 SampleVelOpt(int x, int y, int z) { MegaFlowVector mv = optvel[(x * gridDim2[2] * gridDim2[1]) + (z * gridDim2[1]) + y]; Vector3 v; v.x = (((float)mv.x * oadj) - 0.5f) * maxval.x; v.y = (((float)mv.y * oadj) - 0.5f) * maxval.y; v.z = (((float)mv.z * oadj) - 0.5f) * maxval.z; return(v); }
public void Optimize() { Vector3 max = Vector3.zero; if ( optvel == null ) optvel = new List<MegaFlowVector>(); optvel.Clear(); for ( int i = 0; i < vel.Count; i++ ) { Vector3 v = vel[i]; if ( Mathf.Abs(v.x) > max.x ) max.x = Mathf.Abs(v.x); if ( Mathf.Abs(v.y) > max.y ) max.y = Mathf.Abs(v.y); if ( Mathf.Abs(v.z) > max.z ) max.z = Mathf.Abs(v.z); } maxval = max; for ( int i = 0; i < vel.Count; i++ ) { MegaFlowVector mv = new MegaFlowVector(); Vector3 v = vel[i]; mv.x = (byte)(((v.x / maxval.x) + 1.0f) * 0.5f * 255.0f); mv.y = (byte)(((v.y / maxval.y) + 1.0f) * 0.5f * 255.0f); mv.z = (byte)(((v.z / maxval.z) + 1.0f) * 0.5f * 255.0f); optvel.Add(mv); } optimized = true; GetGridVel = GetGridVelOpt; SampleVel = SampleVelOpt; maxval *= 2.0f; vel.Clear(); GC.Collect(); }
public Vector3 GetGridVelOptXY(Vector3 pos, ref bool inbounds) { if (optvel.Count == 0) { return(Vector3.zero); } int xi = (int)(pos.x * oos.x); int yi = (int)(pos.y * oos.y); if (xi < 0 || xi >= gridDim2[0] - 1) { inbounds = false; return(Vector3.zero); } if (yi < 0 || yi >= gridDim2[1] - 1) { inbounds = false; return(Vector3.zero); } inbounds = true; float xr = Mathf.Abs((pos.x - (xi * spacing.x)) * oos.x); float yr = Mathf.Abs((pos.y - (yi * spacing.y)) * oos.y); int xi1 = (xi + 1) * gridDim2[2] * gridDim2[1]; int yi1 = yi + 1; xi *= gridDim2[2] * gridDim2[1]; MegaFlowVector mv = optvel[xi + yi]; Vector3 V000; V000.x = (float)mv.x; V000.y = (float)mv.y; V000.z = (float)mv.z; mv = optvel[xi1 + yi]; Vector3 V100; V100.x = (float)mv.x; V100.y = (float)mv.y; V100.z = (float)mv.z; mv = optvel[xi1 + yi1]; Vector3 V110; V110.x = (float)mv.x; V110.y = (float)mv.y; V110.z = (float)mv.z; mv = optvel[xi + yi1]; Vector3 V010; V010.x = (float)mv.x; V010.y = (float)mv.y; V010.z = (float)mv.z; float omx = 1.0f - xr; float omy = 1.0f - yr; Vector3 Vxyz = V000 * omx * omy + V100 * xr * omy + V010 * omx * yr + V110 * xr * yr; Vxyz.x = ((Vxyz.x * oadj) - 0.5f) * maxval.x; Vxyz.y = ((Vxyz.y * oadj) - 0.5f) * maxval.y; Vxyz.z = 0.0f; //((Vxyz.z * oadj) - 0.5f) * maxval.z; return(Vxyz); }
public void Optimize() { Vector3 max = Vector3.zero; if (optvel == null) { optvel = new List <MegaFlowVector>(); } optvel.Clear(); for (int i = 0; i < vel.Count; i++) { Vector3 v = vel[i]; if (Mathf.Abs(v.x) > max.x) { max.x = Mathf.Abs(v.x); } if (Mathf.Abs(v.y) > max.y) { max.y = Mathf.Abs(v.y); } if (Mathf.Abs(v.z) > max.z) { max.z = Mathf.Abs(v.z); } } maxval = max; for (int i = 0; i < vel.Count; i++) { MegaFlowVector mv = new MegaFlowVector(); Vector3 v = vel[i]; mv.x = (byte)(((v.x / maxval.x) + 1.0f) * 0.5f * 255.0f); mv.y = (byte)(((v.y / maxval.y) + 1.0f) * 0.5f * 255.0f); mv.z = (byte)(((v.z / maxval.z) + 1.0f) * 0.5f * 255.0f); optvel.Add(mv); } optimized = true; //GetGridVel = GetGridVelOpt; //SampleVel = SampleVelOpt; if (gridDim2[2] == 1) { SampleVel = SampleVelOpt; GetGridVel = GetGridVelOptXY; } else { SampleVel = SampleVelOpt; GetGridVel = GetGridVelOpt; } maxval *= 2.0f; vel.Clear(); GC.Collect(); }