ChunkCullingDebugRenderer.java
net.minecraft.client.renderer.debug.ChunkCullingDebugRenderer
信息
- 全限定名:net.minecraft.client.renderer.debug.ChunkCullingDebugRenderer
- 类型:public class
- 包:net.minecraft.client.renderer.debug
- 源码路径:src/main/java/net/minecraft/client/renderer/debug/ChunkCullingDebugRenderer.java
- 起始行号:L22
- 实现:DebugRenderer.SimpleDebugRenderer
- 职责:
TODO
字段/常量
-
DIRECTIONS- 类型:
Direction[] - 修饰符:
public static final - 源码定位:
L23 - 说明:
TODO
- 类型:
-
minecraft- 类型:
Minecraft - 修饰符:
private final - 源码定位:
L24 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public ChunkCullingDebugRenderer(Minecraft minecraft) @ L26
- 构造器名:ChunkCullingDebugRenderer
- 源码定位:L26
- 修饰符:public
参数:
- minecraft: Minecraft
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void emitGizmos(double camX, double camY, double camZ, DebugValueAccess debugValues, Frustum frustum, float partialTicks) @ L30
- 方法名:emitGizmos
- 源码定位:L30
- 返回类型:void
- 修饰符:public
参数:
- camX: double
- camY: double
- camZ: double
- debugValues: DebugValueAccess
- frustum: Frustum
- partialTicks: float
说明:
TODO
private void addFrustumLine(Vec3 offset, Vector4f a, Vector4f b) @ L115
- 方法名:addFrustumLine
- 源码定位:L115
- 返回类型:void
- 修饰符:private
参数:
- offset: Vec3
- a: Vector4f
- b: Vector4f
说明:
TODO
private void addFrustumQuad(Vec3 offset, Vector4f[] frustumPoints, int i0, int i1, int i2, int i3, int r, int g, int b) @ L119
- 方法名:addFrustumQuad
- 源码定位:L119
- 返回类型:void
- 修饰符:private
参数:
- offset: Vec3
- frustumPoints: Vector4f[]
- i0: int
- i1: int
- i2: int
- i3: int
- r: int
- g: int
- b: int
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class ChunkCullingDebugRenderer implements DebugRenderer.SimpleDebugRenderer {
public static final Direction[] DIRECTIONS = Direction.values();
private final Minecraft minecraft;
public ChunkCullingDebugRenderer(Minecraft minecraft) {
this.minecraft = minecraft;
}
@Override
public void emitGizmos(double camX, double camY, double camZ, DebugValueAccess debugValues, Frustum frustum, float partialTicks) {
LevelRenderer levelRenderer = this.minecraft.levelRenderer;
boolean sectionPath = this.minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.CHUNK_SECTION_PATHS);
boolean sectionVisibility = this.minecraft.debugEntries.isCurrentlyEnabled(DebugScreenEntries.CHUNK_SECTION_VISIBILITY);
if (sectionPath || sectionVisibility) {
SectionOcclusionGraph sectionOcclusionGraph = levelRenderer.getSectionOcclusionGraph();
for (SectionRenderDispatcher.RenderSection section : levelRenderer.getVisibleSections()) {
SectionOcclusionGraph.Node node = sectionOcclusionGraph.getNode(section);
if (node != null) {
BlockPos renderOffset = section.getRenderOrigin();
if (sectionPath) {
int color = node.step == 0 ? 0 : Mth.hsvToRgb(node.step / 50.0F, 0.9F, 0.9F);
for (int i = 0; i < DIRECTIONS.length; i++) {
if (node.hasSourceDirection(i)) {
Direction direction = DIRECTIONS[i];
Gizmos.line(
Vec3.atLowerCornerWithOffset(renderOffset, 8.0, 8.0, 8.0),
Vec3.atLowerCornerWithOffset(
renderOffset, 8 - 16 * direction.getStepX(), 8 - 16 * direction.getStepY(), 8 - 16 * direction.getStepZ()
),
ARGB.opaque(color)
);
}
}
}
if (sectionVisibility && section.getSectionMesh().hasRenderableLayers()) {
int c = 0;
for (Direction direction1 : DIRECTIONS) {
for (Direction direction2 : DIRECTIONS) {
boolean b = section.getSectionMesh().facesCanSeeEachother(direction1, direction2);
if (!b) {
c++;
Gizmos.line(
Vec3.atLowerCornerWithOffset(
renderOffset, 8 + 8 * direction1.getStepX(), 8 + 8 * direction1.getStepY(), 8 + 8 * direction1.getStepZ()
),
Vec3.atLowerCornerWithOffset(
renderOffset, 8 + 8 * direction2.getStepX(), 8 + 8 * direction2.getStepY(), 8 + 8 * direction2.getStepZ()
),
ARGB.color(255, 255, 0, 0)
);
}
}
}
if (c > 0) {
float delta = 0.5F;
float a = 0.2F;
Gizmos.cuboid(section.getBoundingBox().deflate(0.5), GizmoStyle.fill(ARGB.colorFromFloat(0.2F, 0.9F, 0.9F, 0.0F)));
}
}
}
}
}
Frustum capturedFrustum = this.minecraft.gameRenderer.getMainCamera().getCapturedFrustum();
if (capturedFrustum != null) {
Vec3 offset = new Vec3(capturedFrustum.getCamX(), capturedFrustum.getCamY(), capturedFrustum.getCamZ());
Vector4f[] frustumPoints = capturedFrustum.getFrustumPoints();
this.addFrustumQuad(offset, frustumPoints, 0, 1, 2, 3, 0, 1, 1);
this.addFrustumQuad(offset, frustumPoints, 4, 5, 6, 7, 1, 0, 0);
this.addFrustumQuad(offset, frustumPoints, 0, 1, 5, 4, 1, 1, 0);
this.addFrustumQuad(offset, frustumPoints, 2, 3, 7, 6, 0, 0, 1);
this.addFrustumQuad(offset, frustumPoints, 0, 4, 7, 3, 0, 1, 0);
this.addFrustumQuad(offset, frustumPoints, 1, 5, 6, 2, 1, 0, 1);
this.addFrustumLine(offset, frustumPoints[0], frustumPoints[1]);
this.addFrustumLine(offset, frustumPoints[1], frustumPoints[2]);
this.addFrustumLine(offset, frustumPoints[2], frustumPoints[3]);
this.addFrustumLine(offset, frustumPoints[3], frustumPoints[0]);
this.addFrustumLine(offset, frustumPoints[4], frustumPoints[5]);
this.addFrustumLine(offset, frustumPoints[5], frustumPoints[6]);
this.addFrustumLine(offset, frustumPoints[6], frustumPoints[7]);
this.addFrustumLine(offset, frustumPoints[7], frustumPoints[4]);
this.addFrustumLine(offset, frustumPoints[0], frustumPoints[4]);
this.addFrustumLine(offset, frustumPoints[1], frustumPoints[5]);
this.addFrustumLine(offset, frustumPoints[2], frustumPoints[6]);
this.addFrustumLine(offset, frustumPoints[3], frustumPoints[7]);
}
}
private void addFrustumLine(Vec3 offset, Vector4f a, Vector4f b) {
Gizmos.line(new Vec3(offset.x + a.x, offset.y + a.y, offset.z + a.z), new Vec3(offset.x + b.x, offset.y + b.y, offset.z + b.z), -16777216);
}
private void addFrustumQuad(Vec3 offset, Vector4f[] frustumPoints, int i0, int i1, int i2, int i3, int r, int g, int b) {
float a = 0.25F;
Gizmos.rect(
new Vec3(frustumPoints[i0].x(), frustumPoints[i0].y(), frustumPoints[i0].z()).add(offset),
new Vec3(frustumPoints[i1].x(), frustumPoints[i1].y(), frustumPoints[i1].z()).add(offset),
new Vec3(frustumPoints[i2].x(), frustumPoints[i2].y(), frustumPoints[i2].z()).add(offset),
new Vec3(frustumPoints[i3].x(), frustumPoints[i3].y(), frustumPoints[i3].z()).add(offset),
GizmoStyle.fill(ARGB.colorFromFloat(0.25F, r, g, b))
);
}
}引用的其他类
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Direction.values()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
GizmoStyle.fill()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Gizmos.cuboid(), Gizmos.line(), Gizmos.rect()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ARGB.color(), ARGB.colorFromFloat(), ARGB.opaque()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.hsvToRgb()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/方法调用/构造调用 - 关联成员:
Vec3(), Vec3.atLowerCornerWithOffset()
- 引用位置: