• 论坛

导航

  • 主页
  • 样式指南
  • 入门
    • 概述
    • Mod的结构
    • Forge更新检查器
    • 依赖管理
    • 调试分析器
  • 概念
    • Sides
    • 资源
    • 注册表
    • Jar签名
    • 国际化和本地化
  • 方块
    • 概述
    • 介绍方块状态
    • 方块互动
  • 动画 API
    • 概述
    • 骨骼
    • 动画状态机
    • 使用API
  • TileEntity
    • 概述
    • 特殊渲染器
      • 创建一个TESR
      • 注册TESR
      • FastTESR
  • 物品
    • 主页
    • 战利品表
  • 模型
    • 模型概述
    • 模型文件
    • 方块状态
      • 方块状态JSON概述
      • Forge方块状态JSON
    • 绑定模型到方块和物品
    • 彩色纹理
    • 物品属性概述
    • 高级模型(未翻译)
      • 高级模型介绍
      • IModel
      • IModelState and IModelPart
      • IBakedModel
      • Extended Blockstates
      • Perspective
      • ItemOverrideList
      • ICustomModelLoader
  • 渲染
    • TileEntityItemStackRenderer
  • 事件
    • 基本用法
  • 网络
    • 主页
    • 概述
    • SimpleImpl
    • 实体
  • 数据储存
    • 能力系统
    • World Saved Data
    • 拓展实体属性
    • Config注解
  • 工具
    • 合成
    • 矿物词典
    • 权限API
  • 效果
    • 音效
  • 惯例
    • 版本命名
    • 文件位置
    • 加载阶段
  • 参与Forge开发
    • 入门
    • PR指南

TileEntity特殊渲染器

TileEntitySpecialRenderer(TESR)是用来渲染不能被一个静态的烘焙模型(Static Baked Model,即JSON、OBJ、B3D等)所表示的方块的。TESR需要方块拥有一个TileEntity。

默认情况下OpenGL(GlStateManager)是在TESR中处理渲染的。想了解更多的话请看OpenGL的文档。我们推荐尽可能的情况都是使用FastTESR。

创建一个TESR

如果想要创建一个TESR的话,创建一个继承自 TileEntitySpecialRenderer 的类。它会需求一个泛型(Generic)的参数用来指定这个方块的TileEntity类。这个泛型参数将会使用在TESR的 renderTileEntityAt 方法中。

对一个特定的TileEntity只存在有一个TESR。所以,世界中存在于单独实例中的值应该存储在传入TESR的TileEntity中,而不是TESR本身。比如说,有一个整数在每一帧都会递增,如果它储存在TESR中的话,它在每一帧、对世界中每一个该类型的TileEntity都会递增。

renderTileEntityAt

这个方法在每一帧都会调用以渲染TileEntity。

参数

  • tileentity:这是被渲染TileEntity的实例
  • x, y, z:TileEntity需要被渲染的位置
  • partialTicks: 从上一个整刻(Full Tick)之后经过的时间
  • destroyStage:方块被破坏的破坏阶段

注册TESR

如果想要注册一个TESR的话,可以调用 ClientRegistry#bindTileEntitySpecialRenderer,并传入这个TESR所对应的TileEntity类以及TESR的实例。

FastTESR

一个TESR可以通过选择继承 FastTESR 而不是 TileEntitySpecialRenderer 并在 TileEntity#hasFastRenderer 中返回 true 来变为一个 FastTESR。使用FastTESR的话需要实现的是 renderTileEntityFast 而不是 renderTileEntityAt。

FastTESR相比于传统的TESR性能会更好一点,在可能的情况下都应该使用它。这是因为所有的FastTESR实例都被安排到了一起,并且在每一帧只会发送一个合并了所有FastTESR的绘制命令到GPU。这个优点的代价是使直接的OpenGL访问(通过 GlStateManager 或 GLXX)无效。取而代之的是FastTESR必须将顶点添加到所提供的 VertexBuffer 中,它表示所有FastTESR合并的顶点数据。这样就可以渲染 IBakedModel 了。例子可以在 Forge的 AnimationTESR 中找到。

基于 MkDocs 使用自定义主题构建. 托管于 Read the Docs.
启用夜间模式