mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-03-04 14:54:42 +01:00
Graphics Programming 0
- Fixed factory gauges not rendering with correct normals. Probably.
This commit is contained in:
parent
de60a86abf
commit
f8fc832a18
2 changed files with 36 additions and 2 deletions
|
@ -82,17 +82,34 @@ public class FactoryPanelModel extends BakedModelWrapperWithData {
|
|||
for (BakedQuad bakedQuad : quadsToAdd) {
|
||||
int[] vertices = bakedQuad.getVertices();
|
||||
int[] transformedVertices = Arrays.copyOf(vertices, vertices.length);
|
||||
|
||||
|
||||
Vec3 quadNormal = Vec3.atLowerCornerOf(bakedQuad.getDirection()
|
||||
.getNormal());
|
||||
quadNormal = VecHelper.rotate(quadNormal, 180, Axis.Y);
|
||||
quadNormal = VecHelper.rotate(quadNormal, xRot + 90, Axis.X);
|
||||
quadNormal = VecHelper.rotate(quadNormal, yRot, Axis.Y);
|
||||
|
||||
for (int i = 0; i < vertices.length / BakedQuadHelper.VERTEX_STRIDE; i++) {
|
||||
Vec3 vertex = BakedQuadHelper.getXYZ(vertices, i);
|
||||
Vec3 normal = BakedQuadHelper.getNormalXYZ(vertices, i);
|
||||
|
||||
vertex = vertex.add(slot.xOffset * .5, 0, slot.yOffset * .5);
|
||||
vertex = VecHelper.rotateCentered(vertex, 180, Axis.Y);
|
||||
vertex = VecHelper.rotateCentered(vertex, xRot + 90, Axis.X);
|
||||
vertex = VecHelper.rotateCentered(vertex, yRot, Axis.Y);
|
||||
|
||||
normal = VecHelper.rotate(normal, 180, Axis.Y);
|
||||
normal = VecHelper.rotate(normal, xRot + 90, Axis.X);
|
||||
normal = VecHelper.rotate(normal, yRot, Axis.Y);
|
||||
|
||||
BakedQuadHelper.setXYZ(transformedVertices, i, vertex);
|
||||
BakedQuadHelper.setNormalXYZ(transformedVertices, i, new Vec3(0, 1, 0));
|
||||
}
|
||||
|
||||
quads.add(BakedQuadHelper.cloneWithCustomGeometry(bakedQuad, transformedVertices));
|
||||
Direction newNormal = Direction.fromDelta((int) Math.round(quadNormal.x), (int) Math.round(quadNormal.y),
|
||||
(int) Math.round(quadNormal.z));
|
||||
quads.add(new BakedQuad(transformedVertices, bakedQuad.getTintIndex(), newNormal, bakedQuad.getSprite(),
|
||||
bakedQuad.isShade()));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import com.mojang.blaze3d.vertex.DefaultVertexFormat;
|
|||
import com.mojang.blaze3d.vertex.VertexFormat;
|
||||
|
||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public final class BakedQuadHelper {
|
||||
|
@ -46,6 +47,22 @@ public final class BakedQuadHelper {
|
|||
vertexData[vertex * VERTEX_STRIDE + Z_OFFSET] = Float.floatToRawIntBits((float) xyz.z);
|
||||
}
|
||||
|
||||
public static Vec3 getNormalXYZ(int[] vertexData, int vertex) {
|
||||
int data = vertexData[vertex * VERTEX_STRIDE + NORMAL_OFFSET];
|
||||
float x = (byte) (data >> 24 & 0xFF) / 127f;
|
||||
float y = (byte) (data >> 16 & 0xFF) / 127f;
|
||||
float z = (byte) (data >> 8 & 0xFF) / 127f;
|
||||
return new Vec3(x, y, z);
|
||||
}
|
||||
|
||||
public static void setNormalXYZ(int[] vertexData, int vertex, Vec3 xyz) {
|
||||
int x = Byte.toUnsignedInt((byte) (Mth.clamp(xyz.x, -1.0f, 1.0f) * 127));
|
||||
int y = Byte.toUnsignedInt((byte) (Mth.clamp(xyz.y, -1.0f, 1.0f) * 127));
|
||||
int z = Byte.toUnsignedInt((byte) (Mth.clamp(xyz.z, -1.0f, 1.0f) * 127));
|
||||
int data = (x << 24) | (y << 16) | (z << 8);
|
||||
vertexData[vertex * VERTEX_STRIDE + NORMAL_OFFSET] = data;
|
||||
}
|
||||
|
||||
public static float getU(int[] vertexData, int vertex) {
|
||||
return Float.intBitsToFloat(vertexData[vertex * VERTEX_STRIDE + U_OFFSET]);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue