[Учебник]3D Рендер. Версия - 1.6.4.

Привет форумчане, сегодня я научу делать вас 3D рендер!:3

Существуют два рендера (Возможно и больше, но знаю только два)
Это модели - Techne и Obj

Сейчас расскажу о плюсах и минусах течне модели и обж модели.

Techne модель - можно делать шейпов сколько хочешь, но кода естественно становиться больше.
Obj модель - рендерить проще, чем создать ведро с жидкостью по туториалам, но кол-во полигонов не должно привышать ~1000.

Так начнем создавать наш первый 3D рендер OBJ модели!(Покажу только obj,потому что рендером они похожи)
Весь исходный код я конечно выкладывать не буду, но большинство кода я естественно обьясню))
Начнем, все буду описывать по порядку.

1)Делаем регистрацию рендера предмета таким образом.
1.1)Заходим в ClientProxy и добовляем строчку - 

MinecraftForgeClient.registerItemRenderer(CoreMod.test.itemID, new TestRenderer());
CoreMod.test.itemID //заместо test пишем ваш айдишник, но не цифру.
TestRenderer - класс с рендером модели.

На этом работа с прокси у нас заканчивается, но подождите господа, начинается самая морока))

Создаем наш TestRenderer и здесь я буду описывать все поочередно.

Первое что надо сделать, это поставить IItemRenderer. Код - public class RenderRifle implements IItemRenderer {

Так,мы сделали имплемент на РендерПредмета.

После первой фигурной скобки пишем это - 


   private static IModelCustom model; //Это не трогать!!
   private static Hand model1; //Создать класс с руками, если рук нету и нету рендера - УДАЛИТЬ!!


Итак, мы объявили, что у нас есть кастомная модель и вторая модель, которая будет рендериться вместе с ней.(Так можно сделать двуручное оружие:3)

Итак
Дальше мы пишем примерно это - 

   public TestRenderer() {
      model = AdvancedModelLoader.loadModel("/assets/yourid/obj/youmodel.obj"); //Путь к модели 
      model1 = new Hand(); //Рендер рук, если нету - УДАЛИТЬ!!
   }

Помните, мы объявляли IModelCustom как model.Ну так вот, это сократило нам код в несколько букв(как много господи, 10 из 10).
Дальше пишем код, ну просто вписываем :DD

   public boolean handleRenderType(ItemStack is, ItemRenderType type) {
      return type != ItemRenderType.INVENTORY;
   }
   public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack is, ItemRendererHelper helper) {
      return true;
   }

Это мы написали(фиг знает что) и вообщем положите на это вашу толстую ляшку.

Дальше идет весь код рендера, обьясню почти каждую сточку комментариями, то есть //

public void renderItem(ItemRenderType type, ItemStack is, Object ... data) {
      GL11.glPushMatrix(); // Не трогать
      GL11.glEnable(3042); // Не трогать
      GL11.glBlendFunc(770, 771); // Не трогать
      GL11.glTranslatef(-0.6F, 1.3F, 0.5F); // Поворот модели, потренируйтесь.
      GL11.glRotatef(-45.0F, 0.0F, 1.0F, 0.0F); // -45 это градусы, остальное лучше не трогать
      GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);// 180 это градусы, остальное лучше не трогать
      GL11.glScaled(3D, 3D, 3D); // Размеры самой модели
      Minecraft.getMinecraft().renderEngine.bindTexture(tex); // Текстура.
      model.renderAll(); //Не трогать
      GL11.glDisable(3042); //Не трогать
      GL11.glPopMatrix(); //Не трогать
}

Итак, мы написали код рендера и попробывали его изменить.
И да ,я забыла о переменной tex.
Куда мы писали private static IModelCustom model;
Ниже пишем этот код - private static ResourceLocation tex = new ResourceLocation("yourmodid", "/obj/test.png"); // Текстура

И вот, мы заходим в игру, и получаем РЕЗУЛЬТАТ!
Это наверное первая ваша 3D модель..
Если что-то не получается, пишите в этой теме - обьясню как сделать почти все.

Скоро сделаю туториал как рендерить Techne модель, но уже с руками.

Те, кто знает больше меня в этой штуке - не ругайтесь, первый Туториал)))

Ну что, рендерите свои предметы.Удачи в работе)))
 
Ну так некоторые же спрашивают, некоторым нужно.По сути это трогать даже не надо, просто вставляешь и работает.Так что не доставай, а)))
 
25
0
объясни пожалуйста про руки, это течне модель или 3д модель должна быть?
 
1,683
1
Делаешь к модели.Биндишь текстуру игрока на руки,пото предмет.Мне timaha007  рассказывал.Форум:В разработке ->TMS
 
25
0
а что про рендер от 3 лица? Можно сделать больше, анимацию натягивания лука поставить, под руку подогнать?

6feebf198f54.png



b356a9cd0801.png


и еще убрать 3д рендер в инвентаре
 
1,683
1
Гыгы сталкер.Поднять руки евентом.RenderPlayerEvent.Pre(не помню).Там aimedBow=true
 
435
1
Вообще при использовании Techne моделей можно делать например на "крупноблочной" модели мелкие детали путем введения новых рендеров новых моделей со скейлом и кастомизация так делаться могет.
 
19
0
Dragon2488 написал(а):
Еще бы объясняла магические числа в коде.
Если ты имеешь ввиду: "GL11.glRotatef(-45.0F, 0.0F, 1.0F, 0.0F); // -45 это градусы, остальное лучше не трогать".
"0.0F, 1.0F, 0.0F" эти числа в какой-то мере влияют на рендер. Допустим 3D предмет может перевернуться в любую другую сторону, тем самым может повлиять на "GL11.glTranslatef", то есть поменять числа. Допустим вот координаты "GL11.glTranslatef(-0.6F, 1.3F, 0.5F)", если мы не тронули эти числа "0.0F, 1.0F, 0.0F", то "-0.6F" переместит предмет назад, а если мы всё таки затронем эти числа "0.0F, 1.0F, 0.0F", то тогда "-0.6F" будет уже перемещать предмет в стороны: влево, вправо  или же вверх вниз.


И да, поправлю тебя Ань."GL11.glTranslatef(-0.6F, 1.3F, 0.5F); // Поворот модели, потренируйтесь."
Это отвечает насколько я помню не за поворот, а за перемещение по координатной оси, то бишь "-0.6F" перемещает 3D предмет назад, а соответственно "0.6F" прямо или "1.3F" вверх, а "-1.3" вниз и т.д.
 
Alenka^^ написал(а):
Dragon2488 написал(а):
Еще бы объясняла магические числа в коде.
Если ты имеешь ввиду: "GL11.glRotatef(-45.0F, 0.0F, 1.0F, 0.0F); // -45 это градусы, остальное лучше не трогать".
"0.0F, 1.0F, 0.0F" эти числа в какой-то мере влияют на рендер. Допустим 3D предмет может перевернуться в любую другую сторону, тем самым может повлиять на "GL11.glTranslatef", то есть поменять числа. Допустим вот координаты "GL11.glTranslatef(-0.6F, 1.3F, 0.5F)", если мы не тронули эти числа "0.0F, 1.0F, 0.0F", то "-0.6F" переместит предмет назад, а если мы всё таки затронем эти числа "0.0F, 1.0F, 0.0F", то тогда "-0.6F" будет уже перемещать предмет в стороны: влево, вправо  или же вверх вниз.


И да, поправлю тебя Ань."GL11.glTranslatef(-0.6F, 1.3F, 0.5F); // Поворот модели, потренируйтесь."
Это отвечает насколько я помню не за поворот, а за перемещение по координатной оси, то бишь "-0.6F" перемещает 3Dпредмет назад, а соответственно "0.6F" прямо или "1.3F" вверх, а "-1.3" вниз и т.д.
Я, может быть, побольше знаю?
Я эксперементирую с моделями каждый день, и разобралась с матрицами.
 
Сверху