RenderHelper & BaseModelStructure(complex 模型内部管线)

基本信息

字段 类型 含义
类型 glowredman.amazingtrophies.model.complex.RenderHelper(public class) —
单例 RenderHelper.INSTANCE —
VBO 替代 RenderHelperVBO(AmazingTrophies.enableVBO=false 时通过系统属性禁用,选用 RenderHelperVBO 走 TessellatorManager/IVertexArrayObject) —

这是 complex 模型 handler 的核心渲染管线——所有 ComplexTrophyModelHandler.parse 出来的 BaseModelStructure/GeneratedModelStructure 都通过 RenderHelper.INSTANCE.renderModel(...) 渲染。

类层级

类 角色
BaseModelStructure 抽象数据结构:维护 renderFacesArray[x][z][y]、charToBlock、skipHalfOffset、processStructureMap 处理 transparent 剔除与面合并
GeneratedModelStructure BaseModelStructure 子类:new GeneratedModelStructure(structure, blockInfoMap, transpose, skipHalfOffset) 在构造时生成缓存结构
RenderFacesInfo 6 布尔位(6 个面) + allHidden() 检查
CustomRenderBlocks 继承 RenderBlocks——每个面渲染前查 getRenderFacesInfo().isHidden(face),省去 GL state 浪费
RenderHelper 真实渲染入口:renderModel(BaseModelStructure) 套上 GL scale、偏移、面可见性

关键步骤

  1. processStructureMap 把字符矩阵对应到方块矩阵,过滤透明方块、剔除多余面,构造 renderFacesArray[x][z][y]。
  2. RenderHelper.renderModel(...) 按距中心偏移对每个非透明方块调用 RenderBlocks.renderBlockByRenderType。
  3. 启用 VBO 时,走 TessellatorManager.startDrawingQuads + IVertexArrayObject.unbind() 等快速路径。

性能调优

  • 默认开启 enableVBO = !Boolean.getBoolean("amazingtrophies.disableVBO") —— 设置 -Damazingtrophies.disableVBO=true 回到 Tessellator 路径(兼容老显卡或调试用)。
  • skipHalfOffset 列表里的字符跳过 -0.5f 半像素偏移——可用于面与面之间不完全对齐时减少 z-fighting。

相关条目

源码

  • src/main/java/glowredman/amazingtrophies/model/complex/RenderHelper.java
  • src/main/java/glowredman/amazingtrophies/model/complex/BaseModelStructure.java
  • src/main/java/glowredman/amazingtrophies/model/complex/GeneratedModelStructure.java
  • src/main/java/glowredman/amazingtrophies/model/complex/RenderFacesInfo.java
  • src/main/java/glowredman/amazingtrophies/model/complex/CustomRenderBlocks.java