Files
CodeChickenCore/codechicken/lib/lighting/LC.java
T
2013-07-16 17:58:02 +10:00

59 lines
1.5 KiB
Java

package codechicken.lib.lighting;
import codechicken.lib.render.CCModel;
import codechicken.lib.vec.Rotation;
import codechicken.lib.vec.Vector3;
public class LC
{
public LC(int s, float e, float f, float g, float h)
{
side = s;
fa = e;
fb = f;
fc = g;
fd = h;
}
public int side;
public float fa;
public float fb;
public float fc;
public float fd;
public static LC compute(Vector3 vec, Vector3 normal)
{
int side = CCModel.findSide(normal);
if(side < 0)
return new LC(12, 1, 0, 0, 0);
return compute(vec, side);
}
public static LC compute(Vector3 vec, int side)
{
boolean offset = false;
switch(side)
{
case 0: offset = vec.y <= 0; break;
case 1: offset = vec.y >= 1; break;
case 2: offset = vec.z <= 0; break;
case 3: offset = vec.z >= 1; break;
case 4: offset = vec.x <= 0; break;
case 5: offset = vec.x >= 1; break;
}
if(!offset)
side+=6;
return computeO(vec, side);
}
public static LC computeO(Vector3 vec, int side)
{
Vector3 v1 = Rotation.axes[((side&0xE)+3)%6];
Vector3 v2 = Rotation.axes[((side&0xE)+5)%6];
float d1 = (float) vec.scalarProject(v1);
float d2 = 1-d1;
float d3 = (float) vec.scalarProject(v2);
float d4 = 1-d3;
return new LC(side, d2*d4, d2*d3, d1*d4, d1*d3);
}
}