98 lines
2.9 KiB
Java
98 lines
2.9 KiB
Java
package com.seibel.lod.objects;
|
|
|
|
public class DataPoint
|
|
{
|
|
public final static int HEIGHT_SHIFT = 54;
|
|
public final static int DEPTH_SHIFT = 44;
|
|
public final static int RED_SHIFT = 36;
|
|
public final static int GREEN_SHIFT = 28;
|
|
public final static int BLUE_SHIFT = 20;
|
|
public final static int GEN_TYPE_SHIFT = 17;
|
|
public final static int LIGHT_SHIFT = 13;
|
|
public final static int EXISTENCE_SHIFT = 0;
|
|
|
|
public final static long HEIGHT_MASK = Long.parseUnsignedLong("1111111111", 2);
|
|
public final static long DEPTH_MASK = Long.parseUnsignedLong("1111111111", 2);
|
|
public final static long RED_MASK = Long.parseUnsignedLong("11111111", 2);
|
|
public final static long GREEN_MASK = Long.parseUnsignedLong("11111111", 2);
|
|
public final static long BLUE_MASK = Long.parseUnsignedLong("11111111", 2);
|
|
public final static long GEN_TYPE_MASK = Long.parseUnsignedLong("111", 2);
|
|
public final static long LIGHT_MASK = Long.parseUnsignedLong("1111", 2);
|
|
public final static long EXISTENCE_MASK = 1;
|
|
|
|
public static long createDataPoint(int height, int depth, int color)
|
|
{
|
|
int red = (getRed(color) << 16) & 0x00FF0000;
|
|
int green = (getGreen(color) << 8) & 0x0000FF00;
|
|
int blue = getBlue(color)& 0x000000FF;
|
|
return createDataPoint(height, depth, red, green, blue);
|
|
}
|
|
public static long createDataPoint(int height, int depth, int red, int green, int blue)
|
|
{
|
|
long dataPoint = 0;
|
|
dataPoint += (height & HEIGHT_MASK) << HEIGHT_SHIFT;
|
|
dataPoint += (depth & DEPTH_MASK) << DEPTH_SHIFT;
|
|
dataPoint += (red & RED_MASK) << RED_SHIFT;
|
|
dataPoint += (green & GREEN_MASK) << GREEN_SHIFT;
|
|
dataPoint += (blue & BLUE_MASK) << BLUE_SHIFT;
|
|
dataPoint += 1;
|
|
return dataPoint;
|
|
}
|
|
|
|
public static short getHeight(long dataPoint)
|
|
{
|
|
return (short) ((dataPoint >> HEIGHT_SHIFT) & HEIGHT_MASK);
|
|
}
|
|
|
|
public static short getDepth(long dataPoint)
|
|
{
|
|
|
|
return (short) ((dataPoint >> DEPTH_SHIFT) & DEPTH_MASK);
|
|
}
|
|
|
|
public static short getRed(long dataPoint)
|
|
{
|
|
|
|
return (short) ((dataPoint >> RED_SHIFT) & RED_MASK);
|
|
}
|
|
|
|
public static short getGreen(long dataPoint)
|
|
{
|
|
return (short) ((dataPoint >> GREEN_SHIFT) & GREEN_MASK);
|
|
}
|
|
|
|
public static short getBlue(long dataPoint)
|
|
{
|
|
return (short) ((dataPoint >> BLUE_SHIFT) & BLUE_MASK);
|
|
}
|
|
|
|
public static boolean doesItExist(long dataPoint)
|
|
{
|
|
return ((dataPoint & EXISTENCE_MASK) == 1);
|
|
}
|
|
|
|
public static int getColor(long dataPoint)
|
|
{
|
|
int R = (getRed(dataPoint) << 16) & 0x00FF0000;
|
|
int G = (getGreen(dataPoint) << 8) & 0x0000FF00;
|
|
int B = getBlue(dataPoint)& 0x000000FF;
|
|
return 0xFF000000 | R | G | B;
|
|
}
|
|
|
|
public static String toString(long dataPoint)
|
|
{
|
|
StringBuilder s = new StringBuilder();
|
|
s.append(getHeight(dataPoint));
|
|
s.append(" ");
|
|
s.append(getDepth(dataPoint));
|
|
s.append(" ");
|
|
s.append(getRed(dataPoint));
|
|
s.append(" ");
|
|
s.append(getBlue(dataPoint));
|
|
s.append(" ");
|
|
s.append(getGreen(dataPoint));
|
|
s.append('\n');
|
|
return s.toString();
|
|
}
|
|
}
|