222 lines
10 KiB
Java
222 lines
10 KiB
Java
package net.minecraft.client.renderer;
|
|
|
|
import com.mojang.blaze3d.vertex.PoseStack;
|
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
import net.minecraft.core.Direction;
|
|
import net.minecraft.world.phys.AABB;
|
|
import net.minecraft.world.phys.Vec3;
|
|
import net.minecraft.world.phys.shapes.VoxelShape;
|
|
import org.joml.Matrix4f;
|
|
import org.joml.Vector3f;
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
public class ShapeRenderer {
|
|
public static void renderShape(PoseStack poseStack, VertexConsumer buffer, VoxelShape shape, double x, double y, double z, int color) {
|
|
PoseStack.Pose pose = poseStack.last();
|
|
shape.forAllEdges((g, h, j, k, l, m) -> {
|
|
Vector3f vector3f = new Vector3f((float)(k - g), (float)(l - h), (float)(m - j)).normalize();
|
|
buffer.addVertex(pose, (float)(g + x), (float)(h + y), (float)(j + z)).setColor(color).setNormal(pose, vector3f);
|
|
buffer.addVertex(pose, (float)(k + x), (float)(l + y), (float)(m + z)).setColor(color).setNormal(pose, vector3f);
|
|
});
|
|
}
|
|
|
|
public static void renderLineBox(PoseStack poseStack, VertexConsumer buffer, AABB box, float red, float green, float blue, float alpha) {
|
|
renderLineBox(poseStack, buffer, box.minX, box.minY, box.minZ, box.maxX, box.maxY, box.maxZ, red, green, blue, alpha, red, green, blue);
|
|
}
|
|
|
|
public static void renderLineBox(
|
|
PoseStack poseStack,
|
|
VertexConsumer buffer,
|
|
double minX,
|
|
double minY,
|
|
double minZ,
|
|
double maxX,
|
|
double maxY,
|
|
double maxZ,
|
|
float red,
|
|
float green,
|
|
float blue,
|
|
float alpha
|
|
) {
|
|
renderLineBox(poseStack, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha, red, green, blue);
|
|
}
|
|
|
|
public static void renderLineBox(
|
|
PoseStack poseStack,
|
|
VertexConsumer buffer,
|
|
double minX,
|
|
double minY,
|
|
double minZ,
|
|
double maxX,
|
|
double maxY,
|
|
double maxZ,
|
|
float red,
|
|
float green,
|
|
float blue,
|
|
float alpha,
|
|
float red2,
|
|
float green2,
|
|
float blue2
|
|
) {
|
|
PoseStack.Pose pose = poseStack.last();
|
|
float f = (float)minX;
|
|
float g = (float)minY;
|
|
float h = (float)minZ;
|
|
float i = (float)maxX;
|
|
float j = (float)maxY;
|
|
float k = (float)maxZ;
|
|
buffer.addVertex(pose, f, g, h).setColor(red, green2, blue2, alpha).setNormal(pose, 1.0F, 0.0F, 0.0F);
|
|
buffer.addVertex(pose, i, g, h).setColor(red, green2, blue2, alpha).setNormal(pose, 1.0F, 0.0F, 0.0F);
|
|
buffer.addVertex(pose, f, g, h).setColor(red2, green, blue2, alpha).setNormal(pose, 0.0F, 1.0F, 0.0F);
|
|
buffer.addVertex(pose, f, j, h).setColor(red2, green, blue2, alpha).setNormal(pose, 0.0F, 1.0F, 0.0F);
|
|
buffer.addVertex(pose, f, g, h).setColor(red2, green2, blue, alpha).setNormal(pose, 0.0F, 0.0F, 1.0F);
|
|
buffer.addVertex(pose, f, g, k).setColor(red2, green2, blue, alpha).setNormal(pose, 0.0F, 0.0F, 1.0F);
|
|
buffer.addVertex(pose, i, g, h).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 1.0F, 0.0F);
|
|
buffer.addVertex(pose, i, j, h).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 1.0F, 0.0F);
|
|
buffer.addVertex(pose, i, j, h).setColor(red, green, blue, alpha).setNormal(pose, -1.0F, 0.0F, 0.0F);
|
|
buffer.addVertex(pose, f, j, h).setColor(red, green, blue, alpha).setNormal(pose, -1.0F, 0.0F, 0.0F);
|
|
buffer.addVertex(pose, f, j, h).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 0.0F, 1.0F);
|
|
buffer.addVertex(pose, f, j, k).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 0.0F, 1.0F);
|
|
buffer.addVertex(pose, f, j, k).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, -1.0F, 0.0F);
|
|
buffer.addVertex(pose, f, g, k).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, -1.0F, 0.0F);
|
|
buffer.addVertex(pose, f, g, k).setColor(red, green, blue, alpha).setNormal(pose, 1.0F, 0.0F, 0.0F);
|
|
buffer.addVertex(pose, i, g, k).setColor(red, green, blue, alpha).setNormal(pose, 1.0F, 0.0F, 0.0F);
|
|
buffer.addVertex(pose, i, g, k).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 0.0F, -1.0F);
|
|
buffer.addVertex(pose, i, g, h).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 0.0F, -1.0F);
|
|
buffer.addVertex(pose, f, j, k).setColor(red, green, blue, alpha).setNormal(pose, 1.0F, 0.0F, 0.0F);
|
|
buffer.addVertex(pose, i, j, k).setColor(red, green, blue, alpha).setNormal(pose, 1.0F, 0.0F, 0.0F);
|
|
buffer.addVertex(pose, i, g, k).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 1.0F, 0.0F);
|
|
buffer.addVertex(pose, i, j, k).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 1.0F, 0.0F);
|
|
buffer.addVertex(pose, i, j, h).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 0.0F, 1.0F);
|
|
buffer.addVertex(pose, i, j, k).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 0.0F, 1.0F);
|
|
}
|
|
|
|
public static void addChainedFilledBoxVertices(
|
|
PoseStack poseStack,
|
|
VertexConsumer buffer,
|
|
double minX,
|
|
double minY,
|
|
double minZ,
|
|
double maxX,
|
|
double maxY,
|
|
double maxZ,
|
|
float red,
|
|
float green,
|
|
float blue,
|
|
float alpha
|
|
) {
|
|
addChainedFilledBoxVertices(poseStack, buffer, (float)minX, (float)minY, (float)minZ, (float)maxX, (float)maxY, (float)maxZ, red, green, blue, alpha);
|
|
}
|
|
|
|
public static void addChainedFilledBoxVertices(
|
|
PoseStack poseStack,
|
|
VertexConsumer buffer,
|
|
float minX,
|
|
float minY,
|
|
float minZ,
|
|
float maxX,
|
|
float maxY,
|
|
float maxZ,
|
|
float red,
|
|
float green,
|
|
float blue,
|
|
float alpha
|
|
) {
|
|
Matrix4f matrix4f = poseStack.last().pose();
|
|
buffer.addVertex(matrix4f, minX, minY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, minX, minY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, minX, minY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, minX, minY, maxZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, minX, maxY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, minX, maxY, maxZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, minX, maxY, maxZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, minX, minY, maxZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, maxY, maxZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, minY, maxZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, minY, maxZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, minY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, maxY, maxZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, maxY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, maxY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, minY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, minX, maxY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, minX, minY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, minX, minY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, minY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, minX, minY, maxZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, minY, maxZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, minY, maxZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, minX, maxY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, minX, maxY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, minX, maxY, maxZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, maxY, minZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, maxY, maxZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, maxY, maxZ).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, maxX, maxY, maxZ).setColor(red, green, blue, alpha);
|
|
}
|
|
|
|
public static void renderFace(
|
|
PoseStack poseStack,
|
|
VertexConsumer buffer,
|
|
Direction face,
|
|
float x1,
|
|
float y1,
|
|
float z1,
|
|
float x2,
|
|
float y2,
|
|
float z2,
|
|
float red,
|
|
float green,
|
|
float blue,
|
|
float alpha
|
|
) {
|
|
Matrix4f matrix4f = poseStack.last().pose();
|
|
switch (face) {
|
|
case DOWN:
|
|
buffer.addVertex(matrix4f, x1, y1, z1).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x2, y1, z1).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x2, y1, z2).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x1, y1, z2).setColor(red, green, blue, alpha);
|
|
break;
|
|
case UP:
|
|
buffer.addVertex(matrix4f, x1, y2, z1).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x1, y2, z2).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x2, y2, z2).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x2, y2, z1).setColor(red, green, blue, alpha);
|
|
break;
|
|
case NORTH:
|
|
buffer.addVertex(matrix4f, x1, y1, z1).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x1, y2, z1).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x2, y2, z1).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x2, y1, z1).setColor(red, green, blue, alpha);
|
|
break;
|
|
case SOUTH:
|
|
buffer.addVertex(matrix4f, x1, y1, z2).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x2, y1, z2).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x2, y2, z2).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x1, y2, z2).setColor(red, green, blue, alpha);
|
|
break;
|
|
case WEST:
|
|
buffer.addVertex(matrix4f, x1, y1, z1).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x1, y1, z2).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x1, y2, z2).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x1, y2, z1).setColor(red, green, blue, alpha);
|
|
break;
|
|
case EAST:
|
|
buffer.addVertex(matrix4f, x2, y1, z1).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x2, y2, z1).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x2, y2, z2).setColor(red, green, blue, alpha);
|
|
buffer.addVertex(matrix4f, x2, y1, z2).setColor(red, green, blue, alpha);
|
|
}
|
|
}
|
|
|
|
public static void renderVector(PoseStack poseStack, VertexConsumer buffer, Vector3f startPos, Vec3 vector, int color) {
|
|
PoseStack.Pose pose = poseStack.last();
|
|
buffer.addVertex(pose, startPos).setColor(color).setNormal(pose, (float)vector.x, (float)vector.y, (float)vector.z);
|
|
buffer.addVertex(pose, (float)(startPos.x() + vector.x), (float)(startPos.y() + vector.y), (float)(startPos.z() + vector.z))
|
|
.setColor(color)
|
|
.setNormal(pose, (float)vector.x, (float)vector.y, (float)vector.z);
|
|
}
|
|
}
|