This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold за своєю суттю є 3D-рушієм. Навіть коли ви працюєте лише з 2D-матеріалами, увесь рендеринг виконується в 3D, але результат ортографічно проєктується на екран. Defold дає змогу повноцінно використовувати 3D-вміст, додаючи та створюючи 3D-сітки (mesh) під час виконання у ваших колекціях (collection). Ви можете створювати суто тривимірні ігри лише з 3D-ресурсами або поєднувати 3D- та 2D-вміст на власний розсуд.
Компоненти Mesh створюють так само, як будь-які інші компоненти (component) ігрового об’єкта (game object). Це можна зробити двома способами:

Після створення сітки потрібно вказати низку властивостей:
Окрім властивостей Id, Position і Rotation, цей компонент має такі властивості:
Додавши компонент Mesh, ви можете редагувати й змінювати компонент та/або ігровий об’єкт, що його містить, за допомогою звичайних інструментів Scene Editor, переміщуючи, обертаючи й масштабуючи сітку на власний розсуд.
Ви можете змінювати сітки під час виконання за допомогою буферів Defold. Приклад створення куба зі смуг трикутників:
-- cube
local vertices = {
0, 0, 0,
0, 1, 0,
1, 0, 0,
1, 1, 0,
1, 1, 1,
0, 1, 0,
0, 1, 1,
0, 0, 1,
1, 1, 1,
1, 0, 1,
1, 0, 0,
0, 0, 1,
0, 0, 0,
0, 1, 0
}
-- create a buffer with a position stream
local buf = buffer.create(#vertices / 3, {
{ name = hash("position"), type=buffer.VALUE_TYPE_FLOAT32, count = 3 }
})
-- get the position stream and write the vertices
local positions = buffer.get_stream(buf, "position")
for i, value in ipairs(vertices) do
positions[i] = vertices[i]
end
-- set the buffer with the vertices on the mesh
local res = go.get("#mesh", "vertices")
resource.set_buffer(res, buf)
Докладніше про використання компонента Mesh, зокрема приклади проєктів і фрагменти коду, дивіться в анонсі на форумі.
Компоненти Mesh не відсікаються автоматично через їхню динамічну природу та неможливість достеменно знати, як закодовано дані позицій. Щоб відсікати сітку, потрібно задати її обмежувальний паралелепіпед, вирівняний за осями, як метадані буфера, використовуючи 6 чисел із плаваючою комою (мінімальні й максимальні значення AABB):
buffer.set_metadata(buf, hash("AABB"), { 0, 0, 0, 1, 1, 1 }, buffer.VALUE_TYPE_FLOAT32)
Стандартний матеріал компонента mesh має такі константи, які можна змінювати за допомогою go.set() або go.animate() (докладніше див. у посібнику з матеріалів). Приклади:
go.set("#mesh", "tint", vmath.vector4(1,0,0,1))
go.animate("#mesh", "tint", go.PLAYBACK_LOOP_PINGPONG, vmath.vector4(1,0,0,1), go.EASING_LINEAR, 2)
tintvector4). Тип vector4 використовується для представлення відтінку, де x, y, z і w відповідають червоному, зеленому, синьому та альфа-компоненту відтінку.Якщо для параметра Vertex Space матеріалу сітки встановлено значення Local Space, дані передаватимуться до вашого шейдера без змін, і вам потрібно буде, як зазвичай, перетворювати вершини/нормалі на GPU.
Якщо для параметра Vertex Space матеріалу сітки встановлено значення World Space, потрібно або надати стандартні потоки position і normal, або вибрати їх у розкривному списку під час редагування сітки. Це потрібно, щоб рушій міг перетворити дані у світовий простір для об’єднання з іншими об’єктами в пакети.