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