[1.6.4] Искажение модели блока при добавлении её способом от Try4W

Статус
В этой теме нельзя размещать новые ответы.
16
0
Сделал такое же ведро в Blender. 

ZzJwiM.png


Но не вижу возможности экспортировать в java. Скажите это возможно?
 
East написал(а):
Сделал такое же ведро в Blender. 

ZzJwiM.png


Но не вижу возможности экспортировать в java. Скажите это возможно?
Ох, я даже на форуме зарегистрировался)))  ( писал через Faik-man, я у них модели клепаю) Так вот:
1) слишком много полигонов лишних, обж тем и хороши, что можно сильно снизить их количество ( не говоря уже о том, что если постараться даже lod запилить).  Кароче, делай круг потом ctrl+E это сделает внешние стенки ведра, дальше можно ножом ( K ) сделать ручки.

2) Для текстурирования, там где дефул вверху ( менюшка выпадающая) выбираешь UV развертку, потом в окне модели жмешь таб, нажимаешь А ( выделят все точки), затем U и смартразвертку.... Думаю, в меню ткстур разберешься.

3) Насчет триангуляци)) Это такая "забавная" фишка экспортера обж в форге. Не нравится ему много углов у полигона и разое количество точек в разных полигонах, поэтому проще просто сделать все полигоны треугольными. В режиме редактирования ( таб) выделяем ВСЕ ( А) и жмякаем ctrl Т. ^_^

Вобщем-то текне неудобен как в управлении, так и в том, что многова-то полигонов клепает, ну и текстурирование там то еще гуано. Полигоны это лишняя нагрузка, хотя в твоем случае это не будет сильно ощутимо.

Вот полезная инфа:
http://b3d.mezon.ru/index.php/Blender_Basics_4th_edition
http://blender3d.com.ua/
 
1,087
2
А рендерят так:
Код:
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;

import org.lwjgl.opengl.GL11;

@SideOnly(Side.CLIENT)
public class ТвойРендер extends TileEntitySpecialRenderer {
    public static final ResourceLocation textures = new ResourceLocation("текстура от obj файла (её надо делать в 3д моделлере");
    public static final IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("путь до obj файла")); //MTL файл должен быть там же

    /**
     * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
     * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
     * (Render<T extends Entity) and this method has signature public void func_76986_a(T entity, double d, double d1,
     * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
     */
    public void doRender(TileEntity p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_)
    {
        RenderHelper.disableStandardItemLighting();
        GL11.glPushMatrix();
        GL11.glTranslatef((float)p_76986_2_+0.5F, (float)p_76986_4_, (float)p_76986_6_+0.5F);
        this.bindTexture(textures);
        model.renderAll();
        GL11.glPopMatrix();
        RenderHelper.enableStandardItemLighting();
    }

    /**
     * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture.
     */
    protected ResourceLocation getEntityTexture(TileEntity p_110775_1_)
    {
        return textures;
    }

    @Override
    public void renderTileEntityAt(TileEntity p_147500_1_, double p_147500_2_,
            double p_147500_4_, double p_147500_6_, float p_147500_8_) {
        if(p_147500_1_.getWorldObj().getBlockMetadata(p_147500_1_.xCoord, p_147500_1_.yCoord, p_147500_1_.zCoord) == 0)
        this.doRender((TileEntity) p_147500_1_, p_147500_2_, p_147500_4_, p_147500_6_, p_147500_8_, 0);
    }
}
Но это 1.7.10
 
156
0
FanKar написал(а):
Код:
public static final IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("путь до obj файла")); //MTL файл должен быть там же
С чего вы взяли, что материалы вообще будут как-то обрабатываться? Обрабатываются только obj и текстура, поэтому в файле материалов нет надобности.
 
1,087
2
Нету, но ради "эстетичности" и перфеционизма я бы так сделал.
 
156
0
FanKar написал(а):
Нету, но ради "эстетичности" и перфеционизма я бы так сделал.
И в чем заключается "перфекционизм" при забрасывании в ресурсы мода ненужного файла, который будет занимать лишнее место, не много конечно, но все таки?
 
16
0
Доброго времени суток.
Спасибо всем за ответы.

Спасибо Innakentj за ссылки и подробный ответ. В конце концов почитав про blender и посмотрев видео решился переделать модель полностью в blender. Правда сделать правильную развёртку ведра мне так и не удалось. Зато хорошо получилось развернуть цилиндр и нанести текстуру. Пока что просто цилиндр чтоб было с чем работать, потому что основная проблема так и не решена.
 
Спасибо FanKar за пример рендера, однако мне так и не удалось добавить модель.


Вместо модели отображается пустое место плюс контур блока. Я пробовал это сделать достаточно долго (всё это время с тех пор как получил ответы), пробовал и так и сяк, исправлял ошибки и каждый раз обламывался что очено утомило морально.
Вот что у меня получилось: увы
Постить сюда тексты всех классов не хочу потому как всё равно это будет не полно ибо файл obj, иконки и текстуры здесь не к месту, а их расположение в проекте важно т.к. пути в классе рендера ссылаются на них.
Честно говоря меня пока ещё "пугают" неполные примеры - не всегда получается разобраться что к чему и что должно быть кроме приведённого куска класса. Особенно запарился я с путями к ресурсам - вполне возможно что мне не удалось отрендерить модель именно из-за ошибок в пути к модели.


В связи с вышеизложенным прошу привести пример мода с выводом кастомной obj-модели в виде архива, чтоб можно было просто закинуть пакет с кодом и ресурсами и увидеть как правильно это делается.

Вот здесь в посте 25 timoxa007 привёл пример добавления блока с кастомной obj-моделью и даже подтвердил работоспособность при помощи видео. Я пробовал взять этот код и добавить его к тестовому проекту, но опять же увы кроме крашей я ни чего не увидел. Причём когда я убирал часть инициализации из главного класса то краша небыло. но и небыло блока. 

Привидите пожалуйста полный пример! Очень прошу!
 
156
0
Собственно, покажите, как вы ввели добавление модели и текстуры, а точнее путь до них?
 
156
0
timaxa007 написал(а):
Faik-man в архиве "Увы.7z".
[merge_posts_bbcode]Добавлено: 12.02.2016 10:47:46[/merge_posts_bbcode]

East написал(а):
Вот что у меня получилось: увы
Упс.. сорян)
[merge_posts_bbcode]Добавлено: 12.02.2016 11:57:53[/merge_posts_bbcode]

Эм, как я уже говорил ранее в теме, нужно убрать файл .mtl. Необходимости в нем нет

[merge_posts_bbcode]Добавлено: 12.02.2016 12:11:51[/merge_posts_bbcode]

Забыл в прокси клиента добавить рендер модели как итем

Код:
MinecraftForgeClient.registerItemRenderer(арг1, арг2)

арг1 - класс итема или если у тебя блок, то с помощью такой функции Item.getItemFromBlock(mainmod.название нужного блока), преобразуешь блок в итем
арг2 - рендер модели как итем. СОбственно сюда добавляется класс, который реализует IItemRenderer.
В классе рендера нет как такового конструктора, его лучше добавить. то есть, если было так
Код:
public static final ResourceLocation textures = new ResourceLocation("test:textures/blocks/Test.png");//("test:textures/blocks/Test.png");//(".assets/test/textures/blocks/Test.png");//("test:blocks/Test.png");
    
    // Эта строка с ошибкой loadModel не принимает аргумент такого типа
    //public static final IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("путь до obj файла")); //MTL файл должен быть там же
    
    public static final IModelCustom model = AdvancedModelLoader.loadModel("test:textures/blocks/Test.obj");//("test:textures/blocks/Test.obj");//(".assets/test/textures/blocks/Test.obj");//("test:blocks/Test.obj"); //MTL файл должен быть там же

то теперь должно быть так
Код:
public static ResourceLocation textures;
    
    // Эта строка с ошибкой loadModel не принимает аргумент такого типа
    //public static final IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("путь до obj файла")); //MTL файл должен быть там же
    
    public static IModelCustom model;
   
    public TestBlockRender() {
        textures = new ResourceLocation("test:textures/blocks/Test.png");//("test:textures/blocks/Test.png");//(".assets/test/textures/blocks/Test.png");//("test:blocks/Test.png");
        model = AdvancedModelLoader.loadModel(new ResourceLocation("test:textures/blocks/Test.obj"));//("test:textures/blocks/Test.obj");//(".assets/test/textures/blocks/Test.obj");//("test:blocks/Test.obj"); //MTL файл должен быть там же
    }
И самое важное. В классе прокси клиента нужно добавить строку в функцию init в самом начале
Код:
super.init();
Пути все прописаны правильно
 

timaxa007

Модератор
5,831
409
672
East
1. У тебя в @SidedProxy:
Код:
clientSide = "test.proxies.Core"
А должно:
Код:
clientSide = "test.proxies.Client"
2. Регистрировать на 1.6.х в "FMLInitializationEvent", а не "FMLPreInitializationEvent".
3.У тебя:
Код:
public static final IModelCustom model = AdvancedModelLoader.loadModel("test:textures/blocks/Test.obj");
Должно:
Код:
public static final IModelCustom model = AdvancedModelLoader.loadModel("/assets/test/textures/blocks/Test.obj");
---
 
156
0
ВОзможно этот код будет выдавать ошибки, так как я писал для 1.7.10
 

timaxa007

Модератор
5,831
409
672
Faik-man У него 1.6.4, в 1.6.4 не используется ResourceLocation для AdvancedModelLoader.loadModel.
 
16
0
Faik-man написал(а):
Эм, как я уже говорил ранее в теме, нужно убрать файл .mtl. Необходимости в нем нет
Да спасибо я видел Ваш комментарий и вначале я так и делал. Но большое количество неудачных попыток заставило меня перестраховаться и я закинул в проект и mtl-файл на всякий случай. После удачной попытки я бы попробовал бы этот файл убрать и скомпилировать без него.
[merge_posts_bbcode]Добавлено: 12.02.2016 12:18:52[/merge_posts_bbcode]

timaxa007 написал(а):
Faik-man У него 1.6.4, в 1.6.4 не используется ResourceLocation для AdvancedModelLoader.loadModel.
В этом причина моих неудач? (Не увидел предыдущих постов)
 
156
0
Все вы правильно сделали, просто я уже добавил [font=Verdana, Helvetica, Arial, sans-serif]ResourceLocation[/font][font=Verdana, Helvetica, Arial, sans-serif], т.к. в версии 1.7.10 она используется.[/font]
 

timaxa007

Модератор
5,831
409
672
East, не только я написал, 32 посту этой темы, возможные причины.
 
16
0
timaxa007 написал(а):
East
1. У тебя в @SidedProxy:
Код:
clientSide = "test.proxies.Core"
А должно:
Код:
clientSide = "test.proxies.Client"
2. Регистрировать на 1.6.х в "FMLInitializationEvent", а не "FMLPreInitializationEvent".
3.У тебя:
Код:
public static final IModelCustom model = AdvancedModelLoader.loadModel("test:textures/blocks/Test.obj");
Должно:
Код:
public static final IModelCustom model = AdvancedModelLoader.loadModel("/assets/test/textures/blocks/Test.obj");
---
Исправил и всё получилось! Просто невероятно после стольких неудач увиеть свою модель в игре. Огромное спасибо! Чуть позже скину в тему рабочий архив для примера.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху