93 lines
1.6 KiB
C#
93 lines
1.6 KiB
C#
using UnityEngine;
|
|
|
|
[AddComponentMenu("Modifiers/FFD/FFD 3x3x3")]
|
|
public class MegaFFD3x3x3 : MegaFFD
|
|
{
|
|
public override string ModName()
|
|
{
|
|
return "FFD3x3x3";
|
|
}
|
|
|
|
public override int GridSize()
|
|
{
|
|
return 3;
|
|
}
|
|
|
|
public override Vector3 Map(int ii, Vector3 p)
|
|
{
|
|
Vector3 zero = Vector3.zero;
|
|
Vector3 vector = tm.MultiplyPoint3x4(p);
|
|
if (inVol)
|
|
{
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
if (vector[i] < 0f - EPSILON || vector[i] > 1f + EPSILON)
|
|
{
|
|
return p;
|
|
}
|
|
}
|
|
}
|
|
float num = 1f - vector.x;
|
|
float num2 = 1f - vector.y;
|
|
float num3 = 1f - vector.z;
|
|
for (int j = 0; j < 3; j++)
|
|
{
|
|
float num4;
|
|
switch (j)
|
|
{
|
|
case 0:
|
|
num4 = num * num;
|
|
break;
|
|
case 1:
|
|
num4 = 2f * vector.x * num;
|
|
break;
|
|
default:
|
|
num4 = vector.x * vector.x;
|
|
break;
|
|
}
|
|
for (int k = 0; k < 3; k++)
|
|
{
|
|
float num5;
|
|
switch (k)
|
|
{
|
|
case 0:
|
|
num5 = num4 * num2 * num2;
|
|
break;
|
|
case 1:
|
|
num5 = num4 * 2f * vector.y * num2;
|
|
break;
|
|
default:
|
|
num5 = num4 * vector.y * vector.y;
|
|
break;
|
|
}
|
|
for (int l = 0; l < 3; l++)
|
|
{
|
|
float num6;
|
|
switch (l)
|
|
{
|
|
case 0:
|
|
num6 = num5 * num3 * num3;
|
|
break;
|
|
case 1:
|
|
num6 = num5 * 2f * vector.z * num3;
|
|
break;
|
|
default:
|
|
num6 = num5 * vector.z * vector.z;
|
|
break;
|
|
}
|
|
int num7 = j * 9 + k * 3 + l;
|
|
zero.x += pt[num7].x * num6;
|
|
zero.y += pt[num7].y * num6;
|
|
zero.z += pt[num7].z * num6;
|
|
}
|
|
}
|
|
}
|
|
return invtm.MultiplyPoint3x4(zero);
|
|
}
|
|
|
|
public override int GridIndex(int i, int j, int k)
|
|
{
|
|
return i * 9 + j * 3 + k;
|
|
}
|
|
}
|