Как сделать рендер предмета?

318
12
Есть какой то гайдик(Хотя бы английский) по созданию 3d рендера от 1,2,3 лица, но в инвентаре все та же старая 16 на 16 текстура ? Так-же вопрос если например я в коде сделаю для рендера АК47(он длинный) и поставлю obj от АК-47. То тот же самый код будет работать с пистолетом(он короткий) - obj. Извинаюсь так же за частое создание тем
 
Если я правильно понял, то тебе надо изменить в рендере твоего(-их) предмета(-ов) методы "handleRenderType" и "shouldUseRenderHelper", чтобы они возвращали значение "true". К примеру так:
Код:
@Override
public boolean handleRenderType(ItemStack is, ItemRenderType type) {
    return true;
}

@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack is, ItemRendererHelper helper) {
    return true;
}
 
Ага, это ясно, а как добавить модель и текстуру к предмету?
 
timaxa007 написал(а):
Если я правильно понял, то тебе надо изменить в рендере твоего(-их) предмета(-ов) методы "handleRenderType" и "shouldUseRenderHelper", чтобы они возвращали значение "true". К примеру так:
Код:
@Override
public boolean handleRenderType(ItemStack is, ItemRenderType type) {
    return true;
}

@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack is, ItemRendererHelper helper) {
    return true;
}
Сможешь скинуть ссылки на классы в твоем моде которые отвечают за рендер оружки ?
 
hohserg написал(а):
Ага, это ясно, а как добавить модель и текстуру к предмету?
-_- Ну, вот пример:
Код:
public class ItemRendererWeapons implements IItemRenderer {

    private static final IModelCustom model_weapon_sniper = AdvancedModelLoader.loadModel(new ResourceLocation("mod_id", "obj/weapon_sniper.obj"));
    
    public ItemRendererWeapons() {

    }

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

    @Override
    public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack is, ItemRendererHelper helper) {
        return true;
    }

    @Override
    public void renderItem(ItemRenderType type, ItemStack is, Object... data) {
        NBTTagCompound nbt = is.getTagCompound();
        boolean isAim = false;

        if (nbt != null) {
            if (nbt.hasKey("Aim")) isAim = nbt.getBoolean("Aim");
        }

        GL11.glPushMatrix();
        if (type == type.EQUIPPED_FIRST_PERSON) {
            GL11.glTranslatef(-0.1F, 0.825F, 0.45F);
            GL11.glRotatef(-90F, 1.0F, 0.0F, 0.0F);
            GL11.glRotatef(135F, 0.0F, 0.0F, 1.0F);
            GL11.glTranslatef(0.0F, 0.30F, 0.0F);
            if (isAim) GL11.glTranslatef(0.940F, 0.75F, 0.320F);
        } else if (type == type.INVENTORY) {
            GL11.glTranslatef(0.5F, 0.0F, 0.5F);
            GL11.glRotatef(-90F, 1.0F, 0.0F, 0.0F);
        } else {
            GL11.glTranslatef(0.65F, 0.5F, 0.65F);
            GL11.glRotatef(-90F, 1.0F, 0.0F, 0.0F);
            GL11.glRotatef(-135F, 0.0F, 0.0F, 1.0F);
        }
        GL11.glScalef(2.0F, 2.0F, 2.0F);
        Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("textures/blocks/iron_block.png"));
        model_weapon_sniper.renderAll();
        GL11.glPopMatrix();

    }

}
[merge_posts_bbcode]Добавлено: 09.04.2015 14:54:36[/merge_posts_bbcode]

Yarik написал(а):
Сможешь скинуть ссылки на классы в твоем моде которые отвечают за рендер оружки ?
Регистрация рендера:
https://github.com/timaxa007/TMS/blob/master/java/timaxa007/pack/weapon/render/RenderMain.java
Рендер оружия:
https://github.com/timaxa007/TMS/bl...k/weapon/render/item/ItemRendererWeapons.java

Рендер ещё не доделан.
 
timaxa007 написал(а):
hohserg написал(а):
Ага, это ясно, а как добавить модель и текстуру к предмету?
-_- Ну, вот пример:
Код:
public class ItemRendererWeapons implements IItemRenderer {

    private static final IModelCustom model_weapon_sniper = AdvancedModelLoader.loadModel(new ResourceLocation("timaxa007", "obj/weapon_sniper.obj"));
    
    public ItemRendererWeapons() {

    }

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

    @Override
    public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack is, ItemRendererHelper helper) {
        return true;
    }

    @Override
    public void renderItem(ItemRenderType type, ItemStack is, Object... data) {
        NBTTagCompound nbt = is.getTagCompound();
        boolean isAim = false;

        if (nbt != null) {
            if (nbt.hasKey("Aim")) isAim = nbt.getBoolean("Aim");
        }

        //Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("textures/entity/steve.png"));
        GL11.glPushMatrix();
        if (type == type.EQUIPPED_FIRST_PERSON) {
            GL11.glTranslatef(-0.1F, 0.825F, 0.45F);
            GL11.glRotatef(-90F, 1.0F, 0.0F, 0.0F);
            GL11.glRotatef(135F, 0.0F, 0.0F, 1.0F);
            GL11.glTranslatef(0.0F, 0.30F, 0.0F);
            if (isAim) GL11.glTranslatef(0.940F, 0.75F, 0.320F);
        } else if (type == type.INVENTORY) {
            GL11.glTranslatef(0.5F, 0.0F, 0.5F);
            GL11.glRotatef(-90F, 1.0F, 0.0F, 0.0F);
        } else {
            GL11.glTranslatef(0.65F, 0.5F, 0.65F);
            GL11.glRotatef(-90F, 1.0F, 0.0F, 0.0F);
            GL11.glRotatef(-135F, 0.0F, 0.0F, 1.0F);
        }
        GL11.glScalef(2.0F, 2.0F, 2.0F);
        Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("textures/blocks/iron_block.png"));
        model_weapon_sniper.renderAll();
        GL11.glPopMatrix();

    }

}
Наверно слишком тупой вопрос, но как в клиент прокси это зарегать и что добавить в само оружие что бы этот рендер использовался
 
Yarik написал(а):
но как в клиент прокси это зарегать
Код:
MinecraftForgeClient.registerItemRenderer(MyMod.item_weapons, new ItemRendererWeapons());
"MyMod.item_weapons" - путь к переменной твоего предмета,
"new ItemRendererWeapons()" - класс твоего рендера предмета.
Yarik написал(а):
что добавить в само оружие что бы этот рендер использовался
Не совсем понял, но вроде ответ выше (в этом сообщении).
 
а зачем это?
Код:
if (type == type.EQUIPPED_FIRST_PERSON) {
            GL11.glTranslatef(-0.1F, 0.825F, 0.45F);
            GL11.glRotatef(-90F, 1.0F, 0.0F, 0.0F);
            GL11.glRotatef(135F, 0.0F, 0.0F, 1.0F);
            GL11.glTranslatef(0.0F, 0.30F, 0.0F);
            if (isAim) GL11.glTranslatef(0.940F, 0.75F, 0.320F);
        } else if (type == type.INVENTORY) {
            GL11.glTranslatef(0.5F, 0.0F, 0.5F);
            GL11.glRotatef(-90F, 1.0F, 0.0F, 0.0F);
        } else {
            GL11.glTranslatef(0.65F, 0.5F, 0.65F);
            GL11.glRotatef(-90F, 1.0F, 0.0F, 0.0F);
            GL11.glRotatef(-135F, 0.0F, 0.0F, 1.0F);
        }

Нельзя просто эти все действия выполнить при редактировании модели в редакторе?
 
hohserg, чтобы модель принимала определённые позиции в определённом месте. В руке такая позиция и размер, в инветоре другая и в мире ещё по-другому?
 
timaxa007 написал(а):
Если я правильно понял, то тебе надо изменить в рендере твоего(-их) предмета(-ов) методы "handleRenderType" и "shouldUseRenderHelper", чтобы они возвращали значение "true". К примеру так:
Код:
@Override
public boolean handleRenderType(ItemStack is, ItemRenderType type) {
    return true;
}

@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack is, ItemRendererHelper helper) {
    return true;
}
Я не понял что эти 2 методы делают? А за код рендера выше - спасибо большое, так-же я вечером к тебе в лс постучусь за заказом(если согласишься)
 
ага, ясно, чтобы не рисовать и не сохранять копии моделей...
 
Типа рендерить или не рендерить, твой рендер для твоего предмета, я точно не знаю как ответить.
    /**
     * Checks if this renderer should handle a specific item's render type
     * @param item The item we are trying to render
     * @param type A render type to check if this renderer handles
     * @return true if this renderer should handle the given render type,
     * otherwise false
     */
    public boolean handleRenderType(ItemStack item, ItemRenderType type);
   
    /**
     * Checks if certain helper functionality should be executed for this renderer.
     * See ItemRendererHelper for more info
     *
     * @param type The render type
     * @param item The ItemStack being rendered
     * @param helper The type of helper functionality to be ran
     * @return True to run the helper functionality, false to not.
     */
    public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper);
   
 
timaxa007 написал(а):
Типа рендерить или не рендерить, твой рендер для твоего предмета, я точно не знаю как ответить.
    /**
     * Checks if this renderer should handle a specific item's render type
     * @param item The item we are trying to render
     * @param type A render type to check if this renderer handles
     * @return true if this renderer should handle the given render type,
     * otherwise false
     */
    public boolean handleRenderType(ItemStack item, ItemRenderType type);
   
    /**
     * Checks if certain helper functionality should be executed for this renderer.
     * See ItemRendererHelper for more info
     *
     * @param type The render type
     * @param item The ItemStack being rendered
     * @param helper The type of helper functionality to be ran
     * @return True to run the helper functionality, false to not.
     */
    public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper);
   
Типа будет рендерить в руке а в инвентаре будет банальная текстура? Так? Если нет - сможешь подсказать что для этого использовать
 
Yarik, типа да. Использовать... Ну к примеру, чтобы в инвентаре рендерелась иконка 16x16, а в руках или в мире (или нет) модель рендерилась.
 
timaxa007 написал(а):
Yarik, типа да. Использовать... Ну к примеру, чтобы в инвентаре рендерелась иконка 16x16, а в руках или в мире (или нет) модель рендерилась.
Должно быть так. В инвентаре 16-16. В руке. на полу. где угодно рендерилась модель
[merge_posts_bbcode]Добавлено: 09.04.2015 14:19:24[/merge_posts_bbcode]

timaxa007 в принципе да


[merge_posts_bbcode]Добавлено: 09.04.2015 14:26:49[/merge_posts_bbcode]

вечером приеду и проверю рендеринг, и отправлю тебе печеньку на вебмани)

[merge_posts_bbcode]Добавлено: 09.04.2015 14:46:07[/merge_posts_bbcode]

так я так и не понял, что надо добавить для рендера текстуры в инвентаре 16*16?
 
Yarik, вроде так:
Код:
@Override
public boolean handleRenderType(ItemStack is, ItemRenderType type) {
    if (type == type.INVENTORY) return false;
    return true;
}

@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack is, ItemRendererHelper helper) {
    if (type == type.INVENTORY) return false;
    return true;
}
 
timaxa007 написал(а):
Yarik, вроде так:
Код:
@Override
public boolean handleRenderType(ItemStack is, ItemRenderType type) {
    if (type == type.INVENTORY) return false;
    return true;
}

@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack is, ItemRendererHelper helper) {
    if (type == type.INVENTORY) return false;
    return true;
}
Вечером тестану. Отпишусь. Спасибо громадное.
 
Назад
Сверху