Рендер блока с ․obj моделью

Перевод Рендер блока с ․obj моделью

Версия(и) Minecraft
1.12.х
Источник
https://wiki.mcjty.eu/modding/index.php?title=Render_Block_OBJ-1.12
В этой главе я покажу, как создать блок, который визуализирует статическую модель, экспортированную из Blender или любой-другой 3D-программы, которая поддерживает файлы WaveFront .obj.
Результат выглядит так:
jMOm6m4.png


Первое, что вам нужно сделать, это добавить в ваш ClientProxy.preInit () следующий код:
ClientProxy.java:
    public static class ClientProxy extends CommonProxy {
       
        @Override
        public void preInit(FMLPreInitializationEvent e) {
           
            super.preInit(e);

            OBJLoader.INSTANCE.addDomain(MODID);

            ...
        }
    }
Это гарантирует, что obj загрузчик знает о вашем моде.

Затем делаем сам блок:
ModelBlock.java:
public class ModelBlock extends Block {

    public ModelBlock() {
        super(Material.ROCK);
        setUnlocalizedName(ModTut.MODID + ".modelblock");
        setRegistryName("modelblock");
    }

    @SideOnly(Side.CLIENT)
    public void initModel() {
        ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(this), 0, new ModelResourceLocation(getRegistryName(), "inventory"));
    }

    @Override
    @SideOnly(Side.CLIENT)
    public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess worldIn, BlockPos pos, EnumFacing side) {
        return false;
    }

    @Override
    public boolean isBlockNormalCube(IBlockState blockState) {
        return false;
    }

    @Override
    public boolean isOpaqueCube(IBlockState blockState) {
        return false;
    }
}

Затем необходимо создать состояние блока как обычно (blockstates/modelblock.json). Здесь вместо того, чтобы использовать другой. json файл в качестве модели, мы напрямую используем .obj модель, экспортированную в данном случае из Blender. Поскольку Blender и Forge весьма не согласны с вертикальной координатой текстуры (ось "v"), вам нужно добавить атрибут flip-v:
modelblock.json:
{
  "forge_marker": 1,
  "defaults": {
    "custom": { "flip-v": true },
    "model": "modtut:model.obj"
  },
  "variants": {
    "normal": [{}],
    "inventory": [{}]
  }
}

OBJ файл, экспортированный из Blender должен быть помещён к моделям в каталог: "models/block/model.obj". Обратите внимание, что вам также нужен файл model.mtl, который также экспортирует blender, но вы должны изменить его так, чтобы все ссылки на текстуры теперь использовали стандартный формат <modid>: <name>:
model.mtl:
newmtl None
Ns 0
Ka 0.000000 0.000000 0.000000
Kd 0.8 0.8 0.8
Ks 0.8 0.8 0.8
d 1
illum 2
map_Kd modtut:blocks/modeltexture

Другой способ добавления текстур через .json файл состояния блока, путем добавления текстурных карт. Одним из преимуществ является то, что вы можете повторно экспортировать файл .mtl без добавления строки map_Kd каждый раз. Ваш файл .mtl в таком случае должен будет содержать хотя бы одну строку "newmtl [name]". Чтобы отобразить текстуру, добавьте "#[name]" к текстурной карте. Вместо предыдущего примера, где вы добавили строку map_Kd, вы можете просто изменить состояние блока следующим образом:
modelblock.json:
{
  "forge_marker": 1,
  "defaults": {
    "custom": { "flip-v": true },
    "model": "modtut:model.obj",
    "textures": {
      "#None": "modtut:blocks/modeltexture"
    }
  },
  "variants": {
    "normal": [{}],
    "inventory": [{}]
  }
}
Автор
Garik
Просмотры
4,498
Первый выпуск
Обновление
Оценка
4.00 звёзд 2 оценок

Другие ресурсы пользователя Garik

Последние рецензии

Можно было бы информативнее рассказать, например как вращать модель в коде, как менять её размер и т.д., а так нормально :)
В целом хорошо, но я бы для читабельности выделил ссылки, иерархию пакетов и имена файлов жирным. И ещё слишком сжато описан процесс добавление текстур через mtl файл. Добавить немного подробностей, и всё отлично!
Сверху