VulkanShader_1.21.10-0.0.4-alpha.jar
Download file
package net.vulkanmod.render.chunk.build.frapi.helper;
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadView;
import net.minecraft.class_2350;
import net.minecraft.class_2382;
import net.minecraft.class_3532;
import net.vulkanmod.render.model.quad.ModelQuadView;
import net.vulkanmod.render.vertex.format.I32_SNorm;
import org.jetbrains.annotations.NotNull;
import org.joml.Vector3f;
public abstract class NormalHelper {
private static final float PACK = 127.0F;
private static final float UNPACK = 0.007874016F;
private NormalHelper() {
}
public static int packNormal(float x, float y, float z, float w) {
x = class_3532.method_15363(x, -1.0F, 1.0F);
y = class_3532.method_15363(y, -1.0F, 1.0F);
z = class_3532.method_15363(z, -1.0F, 1.0F);
w = class_3532.method_15363(w, -1.0F, 1.0F);
return (int)(x * 127.0F) & 255 | ((int)(y * 127.0F) & 255) << 8 | ((int)(z * 127.0F) & 255) << 16 | ((int)(w * 127.0F) & 255) << 24;
}
public static int packNormal(Vector3f normal, float w) {
return packNormal(normal.x(), normal.y(), normal.z(), w);
}
public static int packNormal(float x, float y, float z) {
x = class_3532.method_15363(x, -1.0F, 1.0F);
y = class_3532.method_15363(y, -1.0F, 1.0F);
z = class_3532.method_15363(z, -1.0F, 1.0F);
return (int)(x * 127.0F) & 255 | ((int)(y * 127.0F) & 255) << 8 | ((int)(z * 127.0F) & 255) << 16;
}
public static int packNormal(Vector3f normal) {
return packNormal(normal.x(), normal.y(), normal.z());
}
public static float unpackNormalX(int packedNormal) {
return (float)((byte)(packedNormal & 255)) * 0.007874016F;
}
public static float unpackNormalY(int packedNormal) {
return (float)((byte)(packedNormal >>> 8 & 255)) * 0.007874016F;
}
public static float unpackNormalZ(int packedNormal) {
return (float)((byte)(packedNormal >>> 16 & 255)) * 0.007874016F;
}
public static float unpackNormalW(int packedNormal) {
return (float)((byte)(packedNormal >>> 24 & 255)) * 0.007874016F;
}
public static void unpackNormal(int packedNormal, Vector3f target) {
target.set(unpackNormalX(packedNormal), unpackNormalY(packedNormal), unpackNormalZ(packedNormal));
}
public static void computeFaceNormal(@NotNull Vector3f saveTo, QuadView q) {
class_2350 nominalFace = q.nominalFace();
if (nominalFace != null && GeometryHelper.isQuadParallelToFace(nominalFace, q)) {
class_2382 vec = nominalFace.method_62675();
saveTo.set((float)vec.method_10263(), (float)vec.method_10264(), (float)vec.method_10260());
} else {
float x0 = q.x(0);
float y0 = q.y(0);
float z0 = q.z(0);
float x1 = q.x(1);
float y1 = q.y(1);
float z1 = q.z(1);
float x2 = q.x(2);
float y2 = q.y(2);
float z2 = q.z(2);
float x3 = q.x(3);
float y3 = q.y(3);
float z3 = q.z(3);
float dx0 = x2 - x0;
float dy0 = y2 - y0;
float dz0 = z2 - z0;
float dx1 = x3 - x1;
float dy1 = y3 - y1;
float dz1 = z3 - z1;
float normX = dy0 * dz1 - dz0 * dy1;
float normY = dz0 * dx1 - dx0 * dz1;
float normZ = dx0 * dy1 - dy0 * dx1;
float l = (float)Math.sqrt((double)(normX * normX + normY * normY + normZ * normZ));
if (l != 0.0F) {
normX /= l;
normY /= l;
normZ /= l;
}
saveTo.set(normX, normY, normZ);
}
}
public static int computePackedNormal(ModelQuadView q) {
float x0 = q.getX(0);
float y0 = q.getY(0);
float z0 = q.getZ(0);
float x1 = q.getX(1);
float y1 = q.getY(1);
float z1 = q.getZ(1);
float x2 = q.getX(2);
float y2 = q.getY(2);
float z2 = q.getZ(2);
float x3 = q.getX(3);
float y3 = q.getY(3);
float z3 = q.getZ(3);
float dx0 = x2 - x0;
float dy0 = y2 - y0;
float dz0 = z2 - z0;
float dx1 = x3 - x1;
float dy1 = y3 - y1;
float dz1 = z3 - z1;
float normX = dy0 * dz1 - dz0 * dy1;
float normY = dz0 * dx1 - dx0 * dz1;
float normZ = dx0 * dy1 - dy0 * dx1;
float l = (float)Math.sqrt((double)(normX * normX + normY * normY + normZ * normZ));
if (l != 0.0F) {
normX /= l;
normY /= l;
normZ /= l;
}
return I32_SNorm.packNormal(normX, normY, normZ);
}
public static int packedNormalFromDirection(class_2350 direction) {
class_2382 normal = direction.method_62675();
return I32_SNorm.packNormal(normal.method_10263(), normal.method_10264(), normal.method_10260());
}
public static void unpackNormalTo(int packedNormal, Vector3f normal) {
normal.set(I32_SNorm.unpackX(packedNormal), I32_SNorm.unpackY(packedNormal), I32_SNorm.unpackZ(packedNormal));
}
}
Download file