Admin (обсуждение | вклад) |
м (→Маппинг рендера) |
||
(не показаны 3 промежуточные версии 2 участников) | |||
Строка 70: | Строка 70: | ||
<syntaxhighlight lang="Javascript">BlockRenderer.setStaticICRender(BlockID.testRenderBlock, -1, icRenderModel); // после этого требуемый блок будет иметь созданную ранее модель</syntaxhighlight> | <syntaxhighlight lang="Javascript">BlockRenderer.setStaticICRender(BlockID.testRenderBlock, -1, icRenderModel); // после этого требуемый блок будет иметь созданную ранее модель</syntaxhighlight> | ||
<div class="mw-parser-output"><div class="mw-parser-output"> | <div class="mw-parser-output"><div class="mw-parser-output"> | ||
+ | <div class="mw-parser-output"> | ||
== Маппинг рендера'' == | == Маппинг рендера'' == | ||
Строка 80: | Строка 81: | ||
<span style="line-height:108%">BlockRenderer.mapAtCoords(x, y, z, model) - устанавливает данную модель ICRender на данные координаты, любой блок, для которого включен маппинг и который стоит на этих координатах, будет иметь эту модель.</span> | <span style="line-height:108%">BlockRenderer.mapAtCoords(x, y, z, model) - устанавливает данную модель ICRender на данные координаты, любой блок, для которого включен маппинг и который стоит на этих координатах, будет иметь эту модель.</span> | ||
− | <span style="line-height:108%"> | + | <span style="line-height:108%">BlockRenderer.unmapAtCoords(x, y, z) - отменяет действие предыдущей функции на данных координатах, возвращая стандартную модель любого блока.</span> |
<u style="text-underline:black">Важно отметить:</u> '' '' | <u style="text-underline:black">Важно отметить:</u> '' '' | ||
Строка 86: | Строка 87: | ||
#Все установленные на координатах модели очищаются при выходе из мира. | #Все установленные на координатах модели очищаются при выходе из мира. | ||
#Наличие блока никак не связано с тем, что на данных координатах установлена модель, это значит, что если сломать блок, подверженный маппингу, у которого была изменена модель и поставить на его место другой блок, тоже подверженный маппингу, то модель сохранится. Потому важно следить, на какой именно блок вызывается mapAtCoords и обязательно вызывать unmapAtCoords при уничтожении блока. | #Наличие блока никак не связано с тем, что на данных координатах установлена модель, это значит, что если сломать блок, подверженный маппингу, у которого была изменена модель и поставить на его место другой блок, тоже подверженный маппингу, то модель сохранится. Потому важно следить, на какой именно блок вызывается mapAtCoords и обязательно вызывать unmapAtCoords при уничтожении блока. | ||
− | + | </div> |
Кроме формы из одного параллелепипеда, которой обладает большинство блоков, Inner Core позволяет задать им почти любой внешний вид.
Хоть наложение текстур и было описано ранее, оно имеет непосредственное отношение к дальнейшему описанию.
Ссылка на каждую отдельную текстуру блока состоит из двух элементов - ее названия и индекса, напомню, что название и индекс задаются для файла текстуры в ресурсах в формате "имя_индекс.png", где имя - произвольная строка, а индекс - неотрицательное целое число.
Текстура целого блока может быть описана либо двумя параметрами - именем и индексом текстуры, в таком случае весь блок будет иметь одну и ту же текстуру, либо массивом текстур, формат которого приведен ниже.
[
["название1", индекс1], // bottom
["название2", индекс2], // top
["название3", индекс3], // back
["название4", индекс4], // front
["название5", индекс5], // left
["название6", индекс6] // right
]
Статичная модель является самым простым типом рендера блока и представляет из себя набор различных элементов внешнего вида блока, которые могут быть отрисованы на произвольных координатах. Внешний вид статичной модели не зависит от того, что ее окружает.
Основной, хоть и не единственный элемент модели - бокс - является текстурированным параллелепипедом с заданными начальными и конечными координатами x1, y1, z1, x2, y2, z2 в пространстве конкретного блока (0 означает начало блока, 1 - конец по данной координате, координаты могут выходить за пределы 0-1).
Пустая статичная модель создается с помощью конструктора new BlockRenderer.Model() и обладает следующими методами:
model.addBox(x1, y1, z1, x2, y2, z2, id, data) - добавляет бокс с текстурой блока с данными id, data
model.addBox(x1, y1, z1, x2, y2, z2, "name", index) - добавляет бокс с текстурой с именем name и индексом index на всех сторонах
model.addBox(x1, y1, z1, x2, y2, z2, [… texture set ...]) - добавляет бокс с заданным массивом текстур (формат см. выше)
model.addMesh(mesh) - добавляет в модель объект RenderMesh - произвольную полигональную 3D модель, о которых будет рассказано позднее
Существуют так же другие конструкторы, упрощающие быстрое создание простых моделей:
new BlockRenderer.Model(mesh) - создает модель, которая содержит в себе данный объект RenderMesh
new BlockRenderer.Model(x1, y1, z1, x2, y2, z2, [… texture set ...]) - создает модель, которая является одним боксом с данным массивом текстур
new BlockRenderer.Model([… texture set ...]) - создает модель, которая является полным блоком с данным массивом текстур
new BlockRenderer.Model(x1, y1, z1, x2, y2, z2, "name", index) - создает модель, которая является одним боксом с данной текстурой на всех сторонах
new BlockRenderer.Model("name", index) - создает модель, которая является полным блоком с данной текстурой на всех сторонах
new BlockRenderer.Model(x1, y1, z1, x2, y2, z2, id, data) - создает модель, которая является одним боксом, копирующим текстуру из блока с данными id, data
new BlockRenderer.Model(id, data) - создает модель, которая является полным блоком, копирующим текстуру из блока с данными id, data
ICRender является системой, позволяющей заранее задать блоку внешний вид в зависимости от внешних условий. Основным объектом для рендера блоков является модель ICRender, которая является набором статических моделей и условий, при которых они будут отрисовываться.
Для создания модели ICRender используется конструктор new ICRender.Model(), для добавления статичной модели в модель ICRender используется метод addEntry(model):
var staticModel = new BlockRenderer.Model(); // модификация модели staticModel
var icRenderModel = new ICRender.Model();
icRenderModel.addEntry(staticModel);
Чтобы установить блоку модель ICRender используется метод
BlockRenderer.setStaticICRender(id, data, model) - где id и data - целевой блок (если надо установить для любого значения data, вместо него нужно передать -1), а model - модель ICRender.
Пример:
BlockRenderer.setStaticICRender(BlockID.testRenderBlock, -1, icRenderModel); // после этого требуемый блок будет иметь созданную ранее модель
Кроме обычной установки ICRender блокам, им можно так же включить режим маппинга рендера. Он позволяет устанавливать любые модели ICRender конкретным блокам в мире, для которых маппинг включен, не затрагивая остальные блоки.
Для включения маппинга используется метод BlockRenderer.enableCoordMapping(id, data, model) - где id и data - целевой блок, а model - модель ICRender, которая будет использована для данного блока по умолчанию.
Без дополнительных действий такой вызов ничем не будет отличаться по действию от вызова BlockRenderer.setStaticICRender. Для маппинга используются следующие методы:
BlockRenderer.mapAtCoords(x, y, z, model) - устанавливает данную модель ICRender на данные координаты, любой блок, для которого включен маппинг и который стоит на этих координатах, будет иметь эту модель.
BlockRenderer.unmapAtCoords(x, y, z) - отменяет действие предыдущей функции на данных координатах, возвращая стандартную модель любого блока.
Важно отметить: