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();
}
}引用的其他类
-
- 引用位置:
字段/返回值
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RenderSystem.bindDefaultUniforms(), RenderSystem.getDevice(), RenderSystem.getDynamicUniforms(), RenderSystem.getModelViewStack(), RenderSystem.getSequentialBuffer(), RenderSystem.setProjectionMatrix()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
BufferBuilder()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ByteBufferBuilder.exactlySized()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Minecraft.getInstance()
- 引用位置:
-
- 引用位置:
字段/构造调用 - 关联成员:
Projection()
- 引用位置:
-
- 引用位置:
字段/构造调用 - 关联成员:
ProjectionMatrixBuffer()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
CubeMapTexture()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置: