CubeMap.java

net.minecraft.client.renderer.CubeMap

信息

  • 全限定名:net.minecraft.client.renderer.CubeMap
  • 类型:public class
  • 包:net.minecraft.client.renderer
  • 源码路径:src/main/java/net/minecraft/client/renderer/CubeMap.java
  • 起始行号:L32
  • 实现:AutoCloseable
  • 职责:

    TODO

字段/常量

  • SIDES

    • 类型: int
    • 修饰符: private static final
    • 源码定位: L33
    • 说明:

      TODO

  • PROJECTION_Z_NEAR

    • 类型: float
    • 修饰符: private static final
    • 源码定位: L34
    • 说明:

      TODO

  • PROJECTION_Z_FAR

    • 类型: float
    • 修饰符: private static final
    • 源码定位: L35
    • 说明:

      TODO

  • PROJECTION_FOV

    • 类型: float
    • 修饰符: private static final
    • 源码定位: L36
    • 说明:

      TODO

  • vertexBuffer

    • 类型: GpuBuffer
    • 修饰符: private final
    • 源码定位: L37
    • 说明:

      TODO

  • projection

    • 类型: Projection
    • 修饰符: private final
    • 源码定位: L38
    • 说明:

      TODO

  • projectionMatrixUbo

    • 类型: ProjectionMatrixBuffer
    • 修饰符: private final
    • 源码定位: L39
    • 说明:

      TODO

  • location

    • 类型: Identifier
    • 修饰符: private final
    • 源码定位: L40
    • 说明:

      TODO

内部类/嵌套类型

构造器

public CubeMap(Identifier base) @ L42

  • 构造器名:CubeMap
  • 源码定位:L42
  • 修饰符:public

参数:

  • base: Identifier

说明:

TODO

方法

下面的方法块按源码顺序生成。

public void render(float rotXInDegrees, float rotYInDegrees) @ L49

  • 方法名:render
  • 源码定位:L49
  • 返回类型:void
  • 修饰符:public

参数:

  • rotXInDegrees: float
  • rotYInDegrees: float

说明:

TODO

private static GpuBuffer initializeVertices() @ L83

  • 方法名:initializeVertices
  • 源码定位:L83
  • 返回类型:GpuBuffer
  • 修饰符:private static

参数:

说明:

TODO

public void registerTextures(TextureManager textureManager) @ L120

  • 方法名:registerTextures
  • 源码定位:L120
  • 返回类型:void
  • 修饰符:public

参数:

  • textureManager: TextureManager

说明:

TODO

public void close() @ L124

  • 方法名:close
  • 源码定位:L124
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class CubeMap implements AutoCloseable {
    private static final int SIDES = 6;
    private static final float PROJECTION_Z_NEAR = 0.05F;
    private static final float PROJECTION_Z_FAR = 10.0F;
    private static final float PROJECTION_FOV = 85.0F;
    private final GpuBuffer vertexBuffer;
    private final Projection projection;
    private final ProjectionMatrixBuffer projectionMatrixUbo;
    private final Identifier location;
 
    public CubeMap(Identifier base) {
        this.location = base;
        this.projection = new Projection();
        this.projectionMatrixUbo = new ProjectionMatrixBuffer("cubemap");
        this.vertexBuffer = initializeVertices();
    }
 
    public void render(float rotXInDegrees, float rotYInDegrees) {
        Minecraft minecraft = Minecraft.getInstance();
        WindowRenderState windowState = minecraft.gameRenderer.getGameRenderState().windowRenderState;
        this.projection.setupPerspective(0.05F, 10.0F, 85.0F, windowState.width, windowState.height);
        RenderSystem.setProjectionMatrix(this.projectionMatrixUbo.getBuffer(this.projection), ProjectionType.PERSPECTIVE);
        RenderPipeline renderPipeline = RenderPipelines.PANORAMA;
        RenderTarget mainRenderTarget = Minecraft.getInstance().getMainRenderTarget();
        GpuTextureView colorTexture = mainRenderTarget.getColorTextureView();
        GpuTextureView depthTexture = mainRenderTarget.getDepthTextureView();
        RenderSystem.AutoStorageIndexBuffer indices = RenderSystem.getSequentialBuffer(VertexFormat.Mode.QUADS);
        GpuBuffer indexBuffer = indices.getBuffer(36);
        Matrix4fStack modelViewStack = RenderSystem.getModelViewStack();
        modelViewStack.pushMatrix();
        modelViewStack.rotationX((float) Math.PI);
        modelViewStack.rotateX(rotXInDegrees * (float) (Math.PI / 180.0));
        modelViewStack.rotateY(rotYInDegrees * (float) (Math.PI / 180.0));
        GpuBufferSlice dynamicTransforms = RenderSystem.getDynamicUniforms()
            .writeTransform(new Matrix4f(modelViewStack), new Vector4f(1.0F, 1.0F, 1.0F, 1.0F), new Vector3f(), new Matrix4f());
        modelViewStack.popMatrix();
 
        try (RenderPass renderPass = RenderSystem.getDevice()
                .createCommandEncoder()
                .createRenderPass(() -> "Cubemap", colorTexture, OptionalInt.empty(), depthTexture, OptionalDouble.empty())) {
            renderPass.setPipeline(renderPipeline);
            RenderSystem.bindDefaultUniforms(renderPass);
            renderPass.setVertexBuffer(0, this.vertexBuffer);
            renderPass.setIndexBuffer(indexBuffer, indices.type());
            renderPass.setUniform("DynamicTransforms", dynamicTransforms);
            AbstractTexture texture = minecraft.getTextureManager().getTexture(this.location);
            renderPass.bindTexture("Sampler0", texture.getTextureView(), texture.getSampler());
            renderPass.drawIndexed(0, 0, 36, 1);
        }
    }
 
    private static GpuBuffer initializeVertices() {
        GpuBuffer var3;
        try (ByteBufferBuilder byteBufferBuilder = ByteBufferBuilder.exactlySized(DefaultVertexFormat.POSITION.getVertexSize() * 4 * 6)) {
            BufferBuilder bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION);
            bufferBuilder.addVertex(-1.0F, -1.0F, 1.0F);
            bufferBuilder.addVertex(-1.0F, 1.0F, 1.0F);
            bufferBuilder.addVertex(1.0F, 1.0F, 1.0F);
            bufferBuilder.addVertex(1.0F, -1.0F, 1.0F);
            bufferBuilder.addVertex(1.0F, -1.0F, 1.0F);
            bufferBuilder.addVertex(1.0F, 1.0F, 1.0F);
            bufferBuilder.addVertex(1.0F, 1.0F, -1.0F);
            bufferBuilder.addVertex(1.0F, -1.0F, -1.0F);
            bufferBuilder.addVertex(1.0F, -1.0F, -1.0F);
            bufferBuilder.addVertex(1.0F, 1.0F, -1.0F);
            bufferBuilder.addVertex(-1.0F, 1.0F, -1.0F);
            bufferBuilder.addVertex(-1.0F, -1.0F, -1.0F);
            bufferBuilder.addVertex(-1.0F, -1.0F, -1.0F);
            bufferBuilder.addVertex(-1.0F, 1.0F, -1.0F);
            bufferBuilder.addVertex(-1.0F, 1.0F, 1.0F);
            bufferBuilder.addVertex(-1.0F, -1.0F, 1.0F);
            bufferBuilder.addVertex(-1.0F, -1.0F, -1.0F);
            bufferBuilder.addVertex(-1.0F, -1.0F, 1.0F);
            bufferBuilder.addVertex(1.0F, -1.0F, 1.0F);
            bufferBuilder.addVertex(1.0F, -1.0F, -1.0F);
            bufferBuilder.addVertex(-1.0F, 1.0F, 1.0F);
            bufferBuilder.addVertex(-1.0F, 1.0F, -1.0F);
            bufferBuilder.addVertex(1.0F, 1.0F, -1.0F);
            bufferBuilder.addVertex(1.0F, 1.0F, 1.0F);
 
            try (MeshData meshData = bufferBuilder.buildOrThrow()) {
                var3 = RenderSystem.getDevice().createBuffer(() -> "Cube map vertex buffer", 32, meshData.vertexBuffer());
            }
        }
 
        return var3;
    }
 
    public void registerTextures(TextureManager textureManager) {
        textureManager.register(this.location, new CubeMapTexture(this.location));
    }
 
    @Override
    public void close() {
        this.vertexBuffer.close();
        this.projectionMatrixUbo.close();
    }
}

引用的其他类

  • GpuBuffer

    • 引用位置: 字段/返回值
  • RenderSystem

    • 引用位置: 方法调用
    • 关联成员: RenderSystem.bindDefaultUniforms(), RenderSystem.getDevice(), RenderSystem.getDynamicUniforms(), RenderSystem.getModelViewStack(), RenderSystem.getSequentialBuffer(), RenderSystem.setProjectionMatrix()
  • BufferBuilder

    • 引用位置: 构造调用
    • 关联成员: BufferBuilder()
  • ByteBufferBuilder

    • 引用位置: 方法调用
    • 关联成员: ByteBufferBuilder.exactlySized()
  • Minecraft

    • 引用位置: 方法调用
    • 关联成员: Minecraft.getInstance()
  • Projection

    • 引用位置: 字段/构造调用
    • 关联成员: Projection()
  • ProjectionMatrixBuffer

    • 引用位置: 字段/构造调用
    • 关联成员: ProjectionMatrixBuffer()
  • CubeMapTexture

    • 引用位置: 构造调用
    • 关联成员: CubeMapTexture()
  • TextureManager

    • 引用位置: 参数
  • Identifier

    • 引用位置: 参数/字段