diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/hires/PRBMWriter.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/hires/PRBMWriter.java index 8556cc62..beda7d34 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/hires/PRBMWriter.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/hires/PRBMWriter.java @@ -87,9 +87,9 @@ public class PRBMWriter implements Closeable { writeString("normal"); out.write( ATTRIBUTE_TYPE_FLOAT | - ATTRIBUTE_NOT_NORMALIZED | + ATTRIBUTE_NORMALIZED | ATTRIBUTE_CARDINALITY_3D_VEC | - ATTRIBUTE_ENCODING_SIGNED_32BIT_FLOAT + ATTRIBUTE_ENCODING_SIGNED_8BIT_INT ); writePadding(); @@ -105,9 +105,9 @@ public class PRBMWriter implements Closeable { ); for (j = 0; j < 3; j++) { // all 3 points - writeFloat(normal.x); - writeFloat(normal.y); - writeFloat(normal.z); + writeNormalizedSignedByteValue(normal.x); + writeNormalizedSignedByteValue(normal.y); + writeNormalizedSignedByteValue(normal.z); } } } @@ -283,6 +283,11 @@ public class PRBMWriter implements Closeable { write4byteValue(Float.floatToIntBits(value)); } + private void writeNormalizedSignedByteValue(float value) throws IOException { + byte normalized = (byte) (value * 0x80 - 0.5); + out.write(normalized & 0xFF); + } + private void writeNormalizedUnsignedByteValue(float value) throws IOException { int normalized = (int) (value * 0xFF); out.write(normalized & 0xFF);