[Учебник] Рендер Techne моделей. Версия - 1.6.x

Итак, всем привет я HanteR (HeliSRaiN). Сегодня я бы хотел пояснить вам как просто рендерить Techne модели. 
____________________________________ПЕРВЫЙ УРОК_______________________________________________
                                                  Рендер Techne модели на ITEM
Что нужно иметь:
  • Сама Techne модель в Java формате(Её настройка и экспорт посмотрите в начале этого урока: http://forum.mcmodding.ru/viewtopic.php?id=839)
  • Текстуру для модели 
  • Eclipse 
  • Прямые руки (ЭТО ВАЖНО!)
  • Заготовка главного класса с обычным предметом
Итак, приступим, в главном класс у вас уже есть регистрация итема + его имя, дальше в PostInit (PostLoad) укажите строчку с регистрацией самого рендер файла для итема.

   MinecraftForgeClient.registerItemRenderer(ModCore.myModel.itemID, (IItemRenderer) new MyModelRender());
   ModCore.myModel.itemID - мы указываем к какому итему мы привяжем рендер
   MyModelRender - сам файл рендера


Ваш главный класс должен выглядеть примерно так:
Код:
     
    public static Item myModel = new MyModel (4000).setUnlocalizedName("myModel "); //ВАШ ЗАРЕГАННЫЙ ИТЕМ

        @EventHandler
    public void load(FMLInitializationEvent event)
    {  
        LanguageRegistry.addName(myModel , "Моя моделька"); //НАЗВАНИЕ ВАШЕГО ИТЕМА

    }
    
            
    @EventHandler
    public void preLoad(FMLPreInitializationEvent event)
    { 

    }

    
    @EventHandler
    public void postload(FMLPostInitializationEvent event) 
    {
        MinecraftForgeClient.registerItemRenderer(ModCore.myModel.itemID, (IItemRenderer) new MyModelRender();
    }
    }

Теперь нам нужен рендер это важная вещь:
  • Тут я всё расписал в комментариях, я надеюсь я сделал эту вещь подробно
Код:
package ModOne.Render;

import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.IItemRenderer;

import org.lwjgl.opengl.GL11;
 
public class MyModelRender implements IItemRenderer
{
    public static MyTechneModel model; //Указываете свой модельку, а дальше переменную model, которую вы будете использовать ниже
    
    Minecraft mc = Minecraft.getMinecraft();
    
    
    public MyModelRender(){
    model = new MyTechneModel(); //Тут вы используете свою переменную model и снова прописываете вашу модель
    }

    @Override 
    public boolean handleRenderType(ItemStack is,ItemRenderType type) //Тут мы поясняем что в инвентаре будет рисоваться не модель, а иконка которую вы указали в самом итеме
        {
        if (type == type.INVENTORY){ //В ИНВЕНТАРЕ БУДЕТ ИКОНКА
        return false;
        } else { // А ТАК БУДЕТ РИСОВАТЬСЯ МОДЕЛЬ
        return true;
        }
        }
    //Если вы хотите рисовать модель в инвентаре, то используйте данный код вместо предыдущего: public boolean handleRenderType(ItemStack is,ItemRenderType type){return true;}
    
    @Override
    public boolean shouldUseRenderHelper(ItemRenderType type,ItemStack is,ItemRendererHelper helper){return true;} //Эта строка важна, да, кстати, если вы хотите чтобы ваша модель когда вы её выкинете из инвентаря не крутилась, то ставьте значение не true, а false

    @Override
    public void renderItem(ItemRenderType type,ItemStack is,Object... data){
        //А вот и самое важное, сами координаты
        GL11.glPushMatrix();
        if(type == type.EQUIPPED_FIRST_PERSON){ //Ниже колонка значений меняет координаты от первого лица
        GL11.glTranslatef(0.0F, 0.0F, 0.0F); //Тут вы указываете перемещение по осям X, Y, Z
        GL11.glRotatef(0F, 0, 0, 1); //Тут вы указываете поворот по оси Z
        GL11.glRotatef(0F, 0, 1, 0);  //Тут вы указываете поворот по оси Y
        GL11.glRotatef(0F, 1, 0, 0);  //Тут вы указываете поворот по оси X
        GL11.glScaled(1.2D, 1.2D, 1.2D); //Тут вы указываете размер, так же вы можете растянуть модель или ужать по осям X, Y, Z, если вам это не нужно всегда ставьте одинаковые значения во всех трёх, то есть можете поставить 3.0F, 3.0F, 3.0F или 2.0F, 2.0F, 2.0F и т.д

//ВАЖНО в GL11.glRotatef(0F, 0, 0, 1); Вы должны менять первое значение, а не последние три, последние три указывают какая ось будет использоваться
        

        } else if (type == type.INVENTORY){
            GL11.glScaled(1.0D, 1.0D, 1.0D);  //Размер в инвентаре (но он в данном случае нам не нужен, так как в инвентаре у нас моделька отражаться не будет). Если нужно, добавьте строки glTranslatef и glRotatef, если конечно вы отключили иконку выше
        } else { //Ниже колонка значений меняет координаты от третьего лица
            double sne = 1.0D; //Так же есть такой способ сразу поменять значения размера во всей строчке размера, тут у нас переменная SNE
            GL11.glTranslatef(0.0F, 0.0F, 0.0F);
            GL11.glRotatef(0F, 0, 0, 1);
            GL11.glRotatef(0F, 0, 1, 0);
            GL11.glRotatef(0F, 1, 0, 0);
            GL11.glScaled(sne, sne, sne); //Тут переменная SNE узнает какое число выше и использует его    
        }
          //А вот самое самое главное, сам рендер модели, тут нужно указать текстуру и зарендерить модель (она уже зарендерина)
        Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("myMod", "textures/MyModel.png")); //Текстура
        this.model.renderAll(); //Рендерит модель
        GL11.glPopMatrix();
        }
     }

Вот и всё друзья, можете запускать свой мод через Debug режим и корректировать координаты. Потому что иногда они неправильны.
ВАЖНО: ЕСЛИ ВЫ НЕ ВИДИТЕ МОДЕЛЬ (НАПРИМЕР, ОТ ПЕРВОГО ЛИЦА) ТО ПОКРУТИТЕ КООРДИНАТЫ И ОНА ВОЗМОЖНО ПОЯВИТЬСЯ, ЕСЛИ НЕТ, ТО ЗНАЧИТ ВЫ ЧТО-ТО ЗАБЫЛИ И НЕ ДОПИСАЛИ В КОДЕ


По теории ваша модель должна отражаться. Скоро я вам поясню как сделать блок с Techne моделью.
Админы, модеры, если вам понравилось, то оставьте, если нет, то удаляйте.


Если у вас есть какие-либо вопросы, то пишите в этой теме, с радостью отвечу.
 
2,955
12
Мне, конечно, понравилось все кроме вырвиглазного оформления.
P.S Еще у меня очень сильно подгорает из-за LanguageRegistry.
 
А еще есть GL12 и GL13, ну так вот.Не изучала еще такую штуку, но там есть что-то интересное.
Как изучу все до конца, расскажу вкратце что это)
 
1,990
18
105
Изучать OpenGL 90-ых и начала нулевых это круто конечно, но иди и возьми нормальную книгу по OpenGL лучше.
 
2,955
12
Цифры на конце название классов GL видела?
Это версии, к примеру:
GL11 - OpenGL версии 1.1
GL15 - OpenGL версии 1.5
И так далее.
 
1,683
1
Даже мне ,вредине,понравилось.  Поправь код под новую версию. И советую переходить. Если че скайп мой знаешь
 
Сверху