public static void WorldPositionToArrayIndex(this Isosurface3D iso, ref Vector3Int refIndex, Vector3 position, Transform mesh, float maxDistance) { float closestDistance = Mathf.Infinity; Vector3Int closestIndex = new Vector3Int(); for (int x = 0; x < iso.Size.x; x++) { for (int y = 0; y < iso.Size.y; y++) { for (int z = 0; z < iso.Size.z; z++) { Vector3 worldPosition = Vectorx.Multiply(new Vector3(x, y, z), mesh.localScale) + mesh.position; float distance = Vector3.Distance(worldPosition, position); if (distance < closestDistance) { closestDistance = distance; closestIndex = new Vector3Int(x, y, z); } } } } if (closestDistance < maxDistance) { refIndex = closestIndex; } }
void OnDrawGizmos() { if (!this.isActiveAndEnabled) { return; } Vector3 sizeTimesScale = Vectorx.Multiply(isosurface.Size.ToVector(), transform.localScale); Gizmos.DrawWireCube(transform.position + (sizeTimesScale / 2), sizeTimesScale); }
protected Vector3 FormatValue(Vector3 value, VertexData vertexData) { switch (noiseDirection) { case NoiseDirection.Local: return(vertexData.position + (Vector3.Scale(value, Magnitude)) - Magnitude); case NoiseDirection.Normal: return(vertexData.position + (Vector3.Scale(vertexData.normal, Vector3.Scale(value, Magnitude)))); case NoiseDirection.Tangent: return(vertexData.position + (Vector3.Scale(vertexData.tangent, Vector3.Scale(value, Magnitude)))); default: return(Vectorx.Multiply(vertexData.position, Vector3.one + Vector3.Scale(value, Magnitude))); } }
public float GetValue(Vector3 position) { UpdateNoiseValues(); return((float)perlin.GetValue(Vectorx.Multiply(position + noiseOffset, noiseScale))); }