3D-Принтер

Totoro 2015-04-01   6 минут на чтение

Трехмерная печать в Minecraft

(инструкции для самых маленьких)

Начиная с версии 1.5.4, в OpenComputers появляется интересный девайс - трехмерный принтер. Он дает возможность печатать декоративные блоки любой формы и цвета. Причем не только статичные блоки, но и двери/люки, кнопки и рычаги!

Давайте рассмотрим, для чего он может пригодиться, и как именно с ним работать.

1. Цель

Как и в предыдущих гайдах, первым делом поставим себе цель.

Мы будем создавать стенную плитку со сквозным орнаментом, в виде морды крипера.

Я не буду приводить в этом гайде рецепты предметов, так как их легко найти в NEI, или в статьях на gamepedia.

2. Обзор принтера

3D-принтер - это периферическое устройство, которое должно быть подключено к работающему компьютеру. Оно представляет собой блок, с двумя внутренними слотами:

Верхний слот предназначен для специальной печатной массы (хамелиума) (изготовляется из редстоуна, гравия, древесного угля и воды). Принтер вмещает два стекапечатной массы (256 000 ед).

Нижний слот занимает картридж с красителями. Объем внутреннего хранилища - два картриджа краски (100 000 ед).

По команде от компьютера, принтер берет немного печатной массы и краски и "распечатывает" в крайний правый слот запрограммированную модель.

На модель из этого гайда, состоящую из 21 фигуры, принтер потратил 424 единицы массы и 314 единиц краски.

3. Отпечатанный блок

Модель для печати задается в виде списка "фигур" - параллелепипедов. Каждая фигура отмечена координатами противоположных углов. Она имеет свою текстуру, цвет оттенка (если необходимо) а также состояние (true/false).

Максимальное количество фигур в модели - 24, по умолчанию.

Координаты блока задаются тремя числами (X, Y, Z) в пределах от 0 до 16.

Блок может переключать свое состояние, когда игрок кликает по нему правой кнопкой мыши, или на блок подается сигнал редстоуна.

По умолчанию блок имеет форму, заданную блоками с состоянием false, и сменяет ее на форму из блоков с состоянием true, при активации.

Кроме того блок имеет несколько дополнительных общих флагов, которые определяют его название, описание и некоторые другие параметры.

4. Программирование принтера

Есть два способа распечатать свою модель. Через компонент принтера и прямое управление, либо при помощи стардартной программки print3d от Сангара.

4.1 Компонент принтера

Подключение принтера ничем не отличается от подключения любого другого устройства:

local com = require('component')
local printer = com.printer3d

Компонент предоставляет набор функций для управления:

4.2 Программа print3d

Код программы не включен в мод по умолчанию, поэтому его надо скачать из интернета.

Последнюю версию можно найти на ГитХабе автора: print3d.lua.

Либо скачать с Pastebin: print3d.lua
(Поставьте интернет-плату, и наберите в консоли компьютера команду pastebin get b5rD8KcY print3d)

Эта программа по сути, читает параметры модели из текстового файла и передает принтеру.

Формат вызова программы:

print3d FILE [count]

Где FILE - название файла с моделью, а необязательный параметр count - количество копий модели.

Модели имеют простой формат - все параметры записываются в таблицу, по аналогии с Луа. Вот образец файла с моделью.

{
  -- Это - название модели. Т.е. название будущего блока, которое будет видно
  -- в инвентаре и подсказке Waila. Название по умолчанию - "3D Print"
  label = "Example Model",
  -- Это описание предмета, такое, как будет видно в инвентаре. Если не задано,
  -- предмет не будет иметь описания
  tooltip = "Это демонстрационная модель, показывающая все возможности",
  emitRedstone = false, --[[ Если этот параметр равен false, блок работает как
                             дверь, сменяя свое состояние при сигнале редстоуна.
                             Если параметр равен true, блок работает как кнопка
                             или рычаг - излучая сигнал при смене состояния.
                             При этом блок не реагирует на сторонний сигнал.
                             По умолчанию параметр равен false. ]]
  buttonMode = false,   --[[ Если этот параметр равен false, модель работает как
                             дверь или рычаг - то есть остается в том состоянии,
                             в которое установлен игроком.
                             Если параметр равен true, модель автоматически
                             возвращается в неактивное состояние через несколько
                             секунд после активации.
                             По умолчанию параметр равен false. ]]
  -- Это список фигур модели, которые определяют, как она выглядит.
  -- Модель должна содержать как минимум одну фигуру (параллелепипед)
  -- в неактивном состоянии.
  -- Фигуры не могут быть "плоскими" т.е. не иметь объема.
  -- Каждая фигура задана шестью числами: minX, minY, minZ, maxX, maxY, maxZ.
  -- (Координаты двух противоположных углов.)
  -- Если смотреть спереди, ось X направлена вправо, ось Y - вверх и ось Z - вглубь.
  -- Дополнительно, каждая фигура длолжна обладать текстурой. Для того чтобы
  -- определить название текстуры, вы можете воспользоваться Определителем Текстуры
  -- (Texture Picker), кликнув им по нужному блоку.
  --
  -- Модель имеет два состояния - неактивное (false, состояние по-умолчанию)
  -- и активное (true, состояние после активации блока).
  shapes = {
    -- Фигура идет от точки <0, 0, 0> (левый нижний угол) до <8, 8, 8> (середина),
    -- и имеет текстуру блока лазурита.
    { 0, 0, 0, 8, 8, 8, texture = "lapis_block" },
    -- Фигура идет из точки <8, 8, 8> (середина) в <16, 16, 16> (правый верхний угол),
    -- и закрашена текстурой дубовой листвы. Фигура принадлежит активному состоянию
    -- модели и имеет светло-зеленый оттенок.
    { 8, 8, 8, 16, 16, 16, texture = "leaves_oak", state = true, tint = 0x48B518 }
  }
}

Т.е. описание модели просто содержит перечень всех тех параметров, которые задаются при помощи компонента, и список фигур из которых модель состоит.

Набор тестовых моделей для изучения, можно найти здесь: models.

5. Проектирование модели

Разобьем мысленно рисунок запланированной модели на параллелепипеды.

Она будет представлять собой тонкую плитку посередине блока, наподобие стекла или решетки.

Руководствуясь сеткой координат и образцом выше, составим описание модели для текстового файла:

{
  label = "Плитка 'Морда крипера'",
  emitRedstone = true,
  buttonMode = false,
  tooltip = "Секретный рычаг в виде головы крипера",
  shapes={
    {0,14,7, 16,16,9, texture="quartz_block_side", tint=0x8eb200},
    {0,2,7,  2,14,9,  texture="quartz_block_side", tint=0x8eb200},
    {6,10,7, 10,14,9, texture="quartz_block_side", tint=0x8eb200},
    {14,2,7, 16,14,9, texture="quartz_block_side", tint=0x8eb200},
    {2,2,7,  4,10,9,  texture="quartz_block_side", tint=0x8eb200},
    {4,8,7,  6,10,9,  texture="quartz_block_side", tint=0x8eb200},
    {10,8,7, 12,10,9, texture="quartz_block_side", tint=0x8eb200},
    {12,2,7, 14,10,9, texture="quartz_block_side", tint=0x8eb200},
    {6,2,7,  10,4,9,  texture="quartz_block_side", tint=0x8eb200},
    {0,0,7,  16,2,9,  texture="quartz_block_side", tint=0x8eb200},
    {0,14,7, 16,16,9, texture="quartz_block_side", tint=0x8eb200, state=true},
    {0,2,7,  2,14,9,  texture="quartz_block_side", tint=0x8eb200, state=true},
    {6,10,7, 10,14,9, texture="quartz_block_side", tint=0x8eb200, state=true},
    {14,2,7, 16,14,9, texture="quartz_block_side", tint=0x8eb200, state=true},
    {2,2,7,  4,10,9,  texture="quartz_block_side", tint=0x8eb200, state=true},
    {4,8,7,  6,10,9,  texture="quartz_block_side", tint=0x8eb200, state=true},
    {10,8,7, 12,10,9, texture="quartz_block_side", tint=0x8eb200, state=true},
    {12,2,7, 14,10,9, texture="quartz_block_side", tint=0x8eb200, state=true},
    {6,2,7,  10,4,9,  texture="quartz_block_side", tint=0x8eb200, state=true},
    {0,0,7,  16,2,9,  texture="quartz_block_side", tint=0x8eb200, state=true},
    {2,2,8,  14,14,9, texture="quartz_block_side", tint=0xe0301e, state=true}
  }
}

Итак, наша плитка имеет двойной набор фигур - для двух состояний, окрашенных в текстуру кварца с зеленым оттенком.

Кнопка будет работать как рычаг, испуская сигнал в активном состоянии.

Откройте файл командой open creeper.

Скопируйте код плитки выше и вставьте в файл кнопкой Insert.

Затем сохраните (Ctrl+S) и покиньте редактор (Ctrl+W).

6. Печать

Все готово, принтер заправлен, модель спроектирована.

Отправляем ее на печать!

print3d creeper

7. Итоги

Enjoy!