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、偏移、面可见性 |
关键步骤
processStructureMap把字符矩阵对应到方块矩阵,过滤透明方块、剔除多余面,构造renderFacesArray[x][z][y]。RenderHelper.renderModel(...)按距中心偏移对每个非透明方块调用RenderBlocks.renderBlockByRenderType。- 启用 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.javasrc/main/java/glowredman/amazingtrophies/model/complex/BaseModelStructure.javasrc/main/java/glowredman/amazingtrophies/model/complex/GeneratedModelStructure.javasrc/main/java/glowredman/amazingtrophies/model/complex/RenderFacesInfo.javasrc/main/java/glowredman/amazingtrophies/model/complex/CustomRenderBlocks.java