Read this manual in English

Компонент Mesh

Defold по сути является 3D движком. Даже когда работа ведется только с 2D-материалом, весь рендеринг выполняется в 3D, но проецируется на экран ортографически. Defold позволяет полноценно использовать 3D-контент, добавляя и создавая 3D-сетки во время выполнения в коллекциях. Игры могут быть созданы исключительно в 3D с использованием только 3D-ассетов, или же 3D и 2D контент может совмещаться в соответствии с целями разработчика.

Создание компонента Mesh

Компоненты сетки создаются так же, как и любой другой компонент игрового объекта. Это можно сделать двумя способами:

  • Создайте файл Mesh, кликнув ПКМ в нужном расположении в браузере Assets и выбрав New... ▸ Mesh.
  • Создайте компонент, встроенный непосредственно в игровой объект, кликнув ПКМ по игровому объекту в представлении Outline и выбрав Add Component ▸ Mesh.

Mesh in game object

После создания сетки необходимо определить ряд ее свойств.

Свойства сетки

Помимо свойств Id, Position и Rotation существуют следующие специфичные для компонента свойства:

Material
Материал, используемый для рендеринга сетки.
Vertices
Файл буфера, описывающий данные сетки для каждого потока.
Primitive Type
Lines, Triangles или Triangle Strip.
Position Stream
Это свойство должно быть именем потока position. Этот поток автоматически предоставляется в качестве входных данных для вертексного шейдера.
Normal Stream
Это свойство должно быть именем потока normal. Этот поток автоматически предоставляется в качестве входных данных для вертексного шейдера.
tex0
Задает текстуру, используемую для сетки.

Манипулирование в редакторе

После того, как компонент сетки размещен, можно свободно редактировать и манипулировать компонентом и/или объемлющим игровым объектом с помощью обычных инструментов Scene Editor, перемещая, вращая и масштабируя сетку по своему усмотрению.

Манипулирование во время выполнения

Используя буферы, сетками можно манипулировать во время выполнения.

Константы материала

The default mesh material has the following constants that can be changed using go.set() or go.animate() (refer to the Material manual for more details). Examples:

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)
tint
Цветовой оттенок сетки (vector4). Для представления оттенка с компонентами x, y, z и w, соответствующими красному, зеленому, синему и альфа оттенкам, используется тип vector4.

Локальное vs мировое пространство вершин

Если параметр Vertex Space материала сетки установлен в Local, данные будут предоставлены в шейдере как есть, и придется преобразовывать вершины/нормали, как принято, на GPU.

Если для свойства Vertex Space материала сетки установлено значение World Space, необходимо либо предоставить поток “position” и “normal” по умолчанию, либо выбрать его из выпадающего списка при редактировании сетки. Это необходимо для того, чтобы движок мог преобразовать данные в мировое пространство для объединения с другими объектами.

Примеры

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

Пример создания куба из треугольных полос (triangle strips):


-- 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)