예제 #1
0
        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);
    }
예제 #3
0
        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)));
            }
        }
예제 #4
0
 public float GetValue(Vector3 position)
 {
     UpdateNoiseValues();
     return((float)perlin.GetValue(Vectorx.Multiply(position + noiseOffset, noiseScale)));
 }