Skip to content

Commit 4d71bef

Browse files
committed
Fixed Faulty Hitbox Rendering
1 parent 5e74854 commit 4d71bef

3 files changed

Lines changed: 97 additions & 31 deletions

File tree

mcinterfaceforge1182/src/main/java/mcinterface1182/InterfaceRender.java

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -195,19 +195,41 @@ public void renderVertices(RenderableData data, boolean changedSinceLastRender)
195195
PoseStack.Pose stackEntry = matrixStack.last();
196196
stackEntry.pose().multiply(matrix4f);
197197

198-
if (data.vertexObject.isLines) {
199-
stackEntry.normal().mul(matrix3f);
200-
VertexConsumer buffer = renderBuffer.getBuffer(RenderType.lines());
201-
while (data.vertexObject.vertices.hasRemaining()) {
202-
buffer.vertex(stackEntry.pose(), data.vertexObject.vertices.get(), data.vertexObject.vertices.get(), data.vertexObject.vertices.get());
203-
buffer.color(data.color.red, data.color.green, data.color.blue, data.alpha);
204-
//Although we don't use them, normals are required for proper rendering. Stupid shaders...
205-
buffer.normal(stackEntry.normal(), 0.0F, 0.0F, 1.0F);
206-
buffer.endVertex();
207-
}
208-
//Rewind buffer for next read.
209-
data.vertexObject.vertices.rewind();
210-
} else {
198+
if (data.vertexObject.isLines) {
199+
stackEntry.normal().mul(matrix3f);
200+
VertexConsumer buffer = renderBuffer.getBuffer(RenderType.lines());
201+
while (data.vertexObject.vertices.hasRemaining()) {
202+
//Read both endpoints of the line segment to compute the direction normal.
203+
//RenderType.lines() uses the normal to determine screen-space line expansion,
204+
//so it must be the normalized direction of each line segment, not a fixed value.
205+
float x1 = data.vertexObject.vertices.get();
206+
float y1 = data.vertexObject.vertices.get();
207+
float z1 = data.vertexObject.vertices.get();
208+
float x2 = data.vertexObject.vertices.get();
209+
float y2 = data.vertexObject.vertices.get();
210+
float z2 = data.vertexObject.vertices.get();
211+
float dx = x2 - x1;
212+
float dy = y2 - y1;
213+
float dz = z2 - z1;
214+
float len = (float) Math.sqrt(dx * dx + dy * dy + dz * dz);
215+
if (len > 0.0F) {
216+
dx /= len;
217+
dy /= len;
218+
dz /= len;
219+
}
220+
buffer.vertex(stackEntry.pose(), x1, y1, z1);
221+
buffer.color(data.color.red, data.color.green, data.color.blue, data.alpha);
222+
buffer.normal(stackEntry.normal(), dx, dy, dz);
223+
buffer.endVertex();
224+
buffer.vertex(stackEntry.pose(), x2, y2, z2);
225+
buffer.color(data.color.red, data.color.green, data.color.blue, data.alpha);
226+
//Although we don't use them, normals are required for proper rendering. Stupid shaders...
227+
buffer.normal(stackEntry.normal(), dx, dy, dz);
228+
buffer.endVertex();
229+
}
230+
//Rewind buffer for next read.
231+
data.vertexObject.vertices.rewind();
232+
} else {
211233
String typeID = data.texture + data.isTranslucent + data.lightingMode + data.enableBrightBlending;
212234
final RenderType renderType;
213235
if (data.vertexObject.cacheVertices && !renderingGUI && ConfigSystem.client.renderingSettings.renderingMode.value != 2) {

mcinterfaceforge1192/src/main/java/mcinterface1192/InterfaceRender.java

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -188,19 +188,41 @@ public void renderVertices(RenderableData data, boolean changedSinceLastRender)
188188
PoseStack.Pose stackEntry = matrixStack.last();
189189
stackEntry.pose().multiply(matrix4f);
190190

191-
if (data.vertexObject.isLines) {
192-
stackEntry.normal().mul(matrix3f);
193-
VertexConsumer buffer = renderBuffer.getBuffer(RenderType.lines());
194-
while (data.vertexObject.vertices.hasRemaining()) {
195-
buffer.vertex(stackEntry.pose(), data.vertexObject.vertices.get(), data.vertexObject.vertices.get(), data.vertexObject.vertices.get());
196-
buffer.color(data.color.red, data.color.green, data.color.blue, data.alpha);
197-
//Although we don't use them, normals are required for proper rendering. Stupid shaders...
198-
buffer.normal(stackEntry.normal(), 0.0F, 0.0F, 1.0F);
199-
buffer.endVertex();
200-
}
201-
//Rewind buffer for next read.
202-
data.vertexObject.vertices.rewind();
203-
} else {
191+
if (data.vertexObject.isLines) {
192+
stackEntry.normal().mul(matrix3f);
193+
VertexConsumer buffer = renderBuffer.getBuffer(RenderType.lines());
194+
while (data.vertexObject.vertices.hasRemaining()) {
195+
//Read both endpoints of the line segment to compute the direction normal.
196+
//RenderType.lines() uses the normal to determine screen-space line expansion,
197+
//so it must be the normalized direction of each line segment, not a fixed value.
198+
float x1 = data.vertexObject.vertices.get();
199+
float y1 = data.vertexObject.vertices.get();
200+
float z1 = data.vertexObject.vertices.get();
201+
float x2 = data.vertexObject.vertices.get();
202+
float y2 = data.vertexObject.vertices.get();
203+
float z2 = data.vertexObject.vertices.get();
204+
float dx = x2 - x1;
205+
float dy = y2 - y1;
206+
float dz = z2 - z1;
207+
float len = (float) Math.sqrt(dx * dx + dy * dy + dz * dz);
208+
if (len > 0.0F) {
209+
dx /= len;
210+
dy /= len;
211+
dz /= len;
212+
}
213+
buffer.vertex(stackEntry.pose(), x1, y1, z1);
214+
buffer.color(data.color.red, data.color.green, data.color.blue, data.alpha);
215+
buffer.normal(stackEntry.normal(), dx, dy, dz);
216+
buffer.endVertex();
217+
buffer.vertex(stackEntry.pose(), x2, y2, z2);
218+
buffer.color(data.color.red, data.color.green, data.color.blue, data.alpha);
219+
//Although we don't use them, normals are required for proper rendering. Stupid shaders...
220+
buffer.normal(stackEntry.normal(), dx, dy, dz);
221+
buffer.endVertex();
222+
}
223+
//Rewind buffer for next read.
224+
data.vertexObject.vertices.rewind();
225+
} else {
204226
String typeID = data.texture + data.isTranslucent + data.lightingMode + data.enableBrightBlending;
205227
final RenderType renderType;
206228
if (data.vertexObject.cacheVertices && !renderingGUI && ConfigSystem.client.renderingSettings.renderingMode.value != 2) {

mcinterfaceforge1201/src/main/java/mcinterface1201/InterfaceRender.java

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -194,11 +194,33 @@ public void renderVertices(RenderableData data, boolean changedSinceLastRender)
194194
stackEntry.normal().mul(matrix3f);
195195
VertexConsumer buffer = renderBuffer.getBuffer(RenderType.lines());
196196
while (data.vertexObject.vertices.hasRemaining()) {
197-
buffer.vertex(stackEntry.pose(), data.vertexObject.vertices.get(), data.vertexObject.vertices.get(), data.vertexObject.vertices.get());
198-
buffer.color(data.color.red, data.color.green, data.color.blue, data.alpha);
199-
//Although we don't use them, normals are required for proper rendering. Stupid shaders...
200-
buffer.normal(stackEntry.normal(), 0.0F, 0.0F, 1.0F);
201-
buffer.endVertex();
197+
//Read both endpoints of the line segment to compute the direction normal.
198+
//RenderType.lines() uses the normal to determine screen-space line expansion,
199+
//so it must be the normalized direction of each line segment, not a fixed value.
200+
float x1 = data.vertexObject.vertices.get();
201+
float y1 = data.vertexObject.vertices.get();
202+
float z1 = data.vertexObject.vertices.get();
203+
float x2 = data.vertexObject.vertices.get();
204+
float y2 = data.vertexObject.vertices.get();
205+
float z2 = data.vertexObject.vertices.get();
206+
float dx = x2 - x1;
207+
float dy = y2 - y1;
208+
float dz = z2 - z1;
209+
float len = (float) Math.sqrt(dx * dx + dy * dy + dz * dz);
210+
if (len > 0.0F) {
211+
dx /= len;
212+
dy /= len;
213+
dz /= len;
214+
}
215+
buffer.vertex(stackEntry.pose(), x1, y1, z1);
216+
buffer.color(data.color.red, data.color.green, data.color.blue, data.alpha);
217+
buffer.normal(stackEntry.normal(), dx, dy, dz);
218+
buffer.endVertex();
219+
buffer.vertex(stackEntry.pose(), x2, y2, z2);
220+
buffer.color(data.color.red, data.color.green, data.color.blue, data.alpha);
221+
//Although we don't use them, normals are required for proper rendering. Stupid shaders...
222+
buffer.normal(stackEntry.normal(), dx, dy, dz);
223+
buffer.endVertex();
202224
}
203225
//Rewind buffer for next read.
204226
data.vertexObject.vertices.rewind();

0 commit comments

Comments
 (0)