mc在游戏加载期间,讲大量分散的贴图合并,用于Batched Render
,加速渲染
代码上对应类net.minecraft.client.renderer.texture.TextureAtlas
本身即继承自AbstractTexture
,证明其本身也是一张图片,这里列出atlas/blocks
而自身含有大量分散的贴图,则被抽象为TextureAtlasSprite
,从中可以拿到u0,u1,v0,v1
类型为float,表明其已是经过标准化的uv坐标
TextureAtlas
内有字段Map<ResourceLocation, TextureAtlasSprite> texturesByName
key
为材质对应的ResourceLocation
部分TextureAtlas
被AtlasSet
所引用,而每一个TextureAtlas
也有一个ResourceLocation
作为其表征
因此,AtlasSet
可被视为Map<ResourceLocation<Map<ResourceLocation,TextureAtlasSprite>>
TextureAtlas stored by AtlasSet | field name |
---|---|
minecraft:textures/atlas/blocks | BLOCK_ATLAS/LOCATION_BLOCKS |
minecraft:textures/atlas/signs | SIGN_SHEET |
minecraft:textures/atlas/banner_patterns | BANNER_SHEET |
minecraft:textures/atlas/shield_patterns | SHIELD_SHEET |
minecraft:textures/atlas/chest | CHEST_SHEET |
minecraft:textures/atlas/beds | BED_SHEET |
minecraft:textures/atlas/shulker_boxes | SHULKER_SHEET |
其余部分的被TextureAtlasHolder
的实现者持有
TextureAtlas | owner |
---|---|
minecraft:textures/atlas/mod_effects | MobEffectTextureManager |
minecraft:textures/atlas/paintings | PaintingTextureManager |
例外
TextureAtlas | owner |
---|---|
minecraft:textures/atlas/particles | ParticleEngine |
可通过Minecraft
类下Function<ResourceLocation, TextureAtlasSprite> getTextureAtlas(ResourceLocation pLocation)
拿到所需TextureAtlasSprite
mc会将被引用的材质自动添加,若想手动添加
可订阅TextureStitchEvent.Pre
通过getAtlas()
拿到TextureAtlas
,若对其添加TextureAtlasSprite
,可调用addSprite(ResourceLocation)
TextureAtlas
实现了net.minecraft.client.renderer.texture.Tickable
最终会调用TextureAtlasSprite$AnimatedTexture#tick
,内部调用glPixelStorei
forge为item添加了如下方法default String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String type)
通过这个方法,可实现为盔甲指定纹理,然而mc在渲染盔甲时,与渲染方块不同,并不使用类似于Atlas,而是直接使用纹理文件作为目标,此过程.mcmeta中指定的动画内容无效
可通过委托TextureAtlasHolder,利用它帮助解析.mcmeta文件,然后手动移除mc在TextureAtlas#getLoadedSprites
添加的MissingTextureAtlasSprite
并且手动设置纹理大小,则在复写forge添加的返回的方法中,返回TextureAtlasHolder
持有的TextureAtlas
对象的ResourceLocation
即可
注意TextureAtlasHolder#getSprite
会修改你在getResourcesToLoad
中提交的的委托的纹理路径