Рендеринг модели minecraft 1.7.10

Версия Minecraft
1.7.10
API
Forge
19
0
Я новичёк в этом деле, но решил добавить модель на еду.
Создал 3д модель пончика , и экспортировал её в .obj и начал подключать,
при этом текстуры наложения я тоже сделал отдельно и подключил.

в models/ я добавил файлы .obj и .mtl


Вот как я делаю рендеринг модели

Java:
package com.integral.tutorialmod.assets.foods.ice_doughnut;

import com.integral.tutorialmod.TutorialModConfig;
import com.integral.tutorialmod.assets.foods.base.IFoodRender;
import com.integral.tutorialmod.utils.ModelWrapperDisplayList;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;
import net.minecraftforge.client.model.obj.WavefrontObject;
import org.lwjgl.opengl.GL11;

public class IceDoughnutRender implements IFoodRender {
  private final ResourceLocation _modelPath = TutorialModConfig.getResourceLocation("models/ice_doughnut/ice_doughnut.obj");
  private final ResourceLocation _doughnutTexture = TutorialModConfig.getResourceLocation("textures/items/foods/ice_doughnut/doughnut.png");
  private final ResourceLocation _glazeTexture = TutorialModConfig.getResourceLocation("textures/items/foods/ice_doughnut/glaze.png");
  private final ResourceLocation _sprinkleTexture = TutorialModConfig.getResourceLocation("textures/items/foods/ice_doughnut/sprinkle.png");

  private final IModelCustom _iceDoughnutModel = new ModelWrapperDisplayList((WavefrontObject) AdvancedModelLoader.loadModel(this._modelPath));

  @Override
  public boolean handleRenderType(ItemStack item, ItemRenderType type) {
    return true;
  }

  @Override
  public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
    return helper != ItemRendererHelper.ENTITY_ROTATION;
  }

  @Override
  public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
    GL11.glPushMatrix();

    Minecraft.getMinecraft().renderEngine.bindTexture(this._sprinkleTexture);
    this._iceDoughnutModel.renderAll();

    Minecraft.getMinecraft().renderEngine.bindTexture(this._doughnutTexture);
    this._iceDoughnutModel.renderAll();

    Minecraft.getMinecraft().renderEngine.bindTexture(this._glazeTexture);
    this._iceDoughnutModel.renderAll();

    GL11.glPopMatrix();
  }
}
В добавок использую Wrapper загрузки модели Wavefront обёрткой от Dahaka

В результате получаю вот такое:😫😫😫😫
java_Ejsr7LUiZv.png
Можете направить на верный путь, что я сделал не так, может модель не такая, или код неправильно написал?

Способо рендеринга изучал по вот этому учебнику
 

Вложения

  • ice_doughnut.rar
    2 MB · Просмотры: 2
Не знаю что внутри this._iceDoughnutModel.renderAll(); но возможно ты рендеришь мэш 3 раза с 3 разными текструами и они оверлапятся, попробуй объеденить текстуры в одну, либо отрисовывать не через renderAll, а через renderPart, сэтая текстуру только для нужной части модели.

UPD: И да, модели надо триангулировать, перед использованием игре.
 
Последнее редактирование:
1. Сделай одну текстуру на всю модель и рендеринг её, или ты можешь рендерить частями, но не нужно рендерить всю модель для каждой текстуры
2. Если в модели больше 20к полигонов она рендерится правильно не будет
3. Для умников с триангуляцией, у него бы Майн крашнулся если была бы в этом проблема
 
Спасибо ребят, попробовал сначала отрендерить по частям, это не сработало, триангуляция тоже не помогла.
Остаеться последний вариант который я ещё не делал , это сделай общою модель.
Но вот подскажите, правильно ли я понимаю что это делается через запикание?
 
Назад
Сверху