reckfellENGINE

ImmediateMesh

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

На этой странице
class ImmediateMeshReckfellSharpНаследует Mesh

ImmediateMesh — ресурс Mesh, не команда рисования поверх кадра и не Entity. SurfaceBegin начинает одну поверхность, SurfaceAddVertex добавляет углы, SurfaceEnd публикует готовую поверхность. Для показа назначьте ресурс MeshInstance3D.Mesh и разместите экземпляр в дереве. Геометрия сохраняется между кадрами: повторный Begin/End добавляет ещё одну поверхность, а не заменяет предыдущую.

C#
using var mesh = new ImmediateMesh();
mesh.SurfaceBegin(Mesh.PrimitiveType.Lines);
mesh.SurfaceSetColor(new Color(1, 0, 0));
mesh.SurfaceAddVertex(new Vector3(0, 0, 2));
mesh.SurfaceAddVertex(new Vector3(1, 0, 2));
mesh.SurfaceEnd();
int surfaceCount = mesh.GetSurfaceCount(); // 1

Пример создаёт данные линии без видимого объекта. При назначении mesh экземпляру сохраняйте ресурс живым на всё время использования; не завершайте его using раньше. Для видимого цвета нужен материал, использующий vertex color, например StandardMaterial3D с VertexColorUseAsAlbedo = true. Сам SurfaceSetColor материал не настраивает. Unshaded-материал подходит для диагностических линий без зависимости от света. Толщина линии в пикселях этим API не задаётся.

Порядок работы: Begin → необязательные setters атрибутов → добавление вершин → End. Одновременно открыта только одна поверхность. End без вершин отклоняется и не закрывает сборку. Для Lines добавляйте пары, для Triangles — тройки углов; индексов, bones/weights, custom-каналов, blend shapes и LOD этот builder не создаёт. Большую повторяющуюся геометрию удобнее подготовить через ArrayMesh или SurfaceTool, а не пересобирать здесь каждый кадр.

Атрибуты запоминаются для следующих вершин. Первый вызов setter также заполняет уже добавленные вершины текущей поверхности этим значением. Следующий вызов меняет только будущие вершины. Это отличается от SurfaceTool: канал можно включить после первой вершины. После успешного End признаки каналов сбрасываются — задавайте нужные атрибуты заново при каждом Begin. Color хранится в 8 бит на канал: значения ограничиваются диапазоном 0…1 и квантуются. Normals/tangents упаковываются, поэтому чтение не обязано дать побитово исходные float.

SurfaceAddVertex2D задаёт Vector2 в буфере mesh; он не создаёт CanvasItem и не переключает сцену в 2D. В одной поверхности нельзя смешивать 2D и 3D. SurfaceEnd сбрасывает размерность для следующей поверхности. Известный дефект версии 1.0.0: ClearSurfaces во время незавершённой 2D-сборки не сбрасывает её размерность. Следующий первый Vector3 теряет Z, дальнейший Vector3 отклоняется. После такого прерывания создайте новый ImmediateMesh; повторный ClearSurfaces дефект не устраняет.

SurfaceEnd отправляет Changed, а ClearSurfaces — нет. Если зависимый код ждёт уведомление после очистки, отправьте EmitChanged явно. ClearSurfaces удаляет все готовые поверхности и отменяет текущую сборку. Полученные SurfaceGetArrays — снимок данных, не live-редактор. Формат и число вершин можно проверять по этим массивам; не переносите C++-виртуальные SurfaceGetArrayLen/SurfaceGetFormat в C# — этих публичных методов здесь нет.

Для треугольников подготовьте normals и UV самостоятельно. Если заданы normals без tangents, движок создаёт вспомогательный tangent из normal, не из UV-развёртки. Для normal mapping задайте согласованные tangents или используйте SurfaceTool.GenerateTangents. SurfaceSetUV2 только записывает координаты, не разворачивает геометрию и не запекает свет.

17 Windows headless-проверок подтвердили CPU-данные и воспроизвели дефект размерности. Полный native-прогон отмечен неуспешным из-за диагностического сообщения в этом сценарии, хотя его ожидаемое поведение зафиксировано. Видимая отрисовка, normal mapping, произвольная геометрия и производительность не подтверждены; движок не исправлялся.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

ImmediateMeshКонструктор
# ImmediateMesh
C#
public ImmediateMesh();

Создаёт собственный пустой Mesh с RID. Для отображения нужен потребитель, например MeshInstance3D. Освобождайте после завершения использования, не как временный объект одного вызова рисования.

Методы10

ClearSurfacesvoid
# ClearSurfaces
C#
public void ClearSurfaces();

Удаляет готовые поверхности и отменяет текущую сборку, очищает вершины/каналы. Не отправляет Changed. Дефект: после прерванной 2D-сборки vertex_2d сохраняется; для следующей 3D-сборки используйте новый ImmediateMesh.

SurfaceAddVertexvoid
# SurfaceAddVertex
C#
public void SurfaceAddVertex(Vector3 vertex);

Добавляет локальный 3D-угол с текущими атрибутами в активную поверхность. Не индексирует и не объединяет одинаковые позиции. Нельзя смешивать с 2D в одной поверхности.

Параметры
ИмяТипПо умолчанию
vertexVector3—
vertex

Локальная конечная Vector3-позиция; выберите 3D для всей поверхности.

SurfaceAddVertex2Dvoid
# SurfaceAddVertex2D
C#
public void SurfaceAddVertex2D(Vector2 vertex);

Добавляет локальный 2D-угол в mesh-буфер с текущими атрибутами. Это не CanvasItem-отрисовка. Нельзя смешивать с 3D; после прерывания такой сборки через ClearSurfaces создайте новый ресурс.

Параметры
ИмяТипПо умолчанию
vertexVector2—
vertex

Локальная позиция Vector2; выберите 2D для всей поверхности.

SurfaceBeginvoid
# SurfaceBegin
C#
public void SurfaceBegin(Mesh.PrimitiveType primitive, Material material = null);

Открывает новую поверхность, задаёт primitive и общий material. Не очищает готовые поверхности. Повторный Begin при открытой сборке отклоняется; setters и добавление вершин разрешены после Begin.

Параметры
ИмяТипПо умолчанию
primitiveMesh.PrimitiveType—
materialMaterialnull
primitive

Способ сборки: пары для Lines, тройки для Triangles. Проверяйте кратность числа углов сами.

material

Общий Material либо null. Vertex colors требуют соответствующей настройки материала; ссылка сохраняется в готовой поверхности.

SurfaceEndvoid
# SurfaceEnd
C#
public void SurfaceEnd();

Публикует непустую активную поверхность, сбрасывает временные каналы/размерность и отправляет Changed. Пустая поверхность отклоняется без закрытия сборки. Не генерирует UV или геометрические normals.

SurfaceSetColorvoid
# SurfaceSetColor
C#
public void SurfaceSetColor(Color color);

Задаёт цвет будущих вершин. Первый вызов также заполняет ранее добавленные вершины текущей поверхности. Хранится как clamped RGBA8; материал должен использовать vertex color.

Параметры
ИмяТипПо умолчанию
colorColor—
color

RGBA; при публикации каждый компонент ограничивается 0…1 и квантуется в 8 бит.

SurfaceSetNormalvoid
# SurfaceSetNormal
C#
public void SurfaceSetNormal(Vector3 normal);

Задаёт normal будущих вершин; первый вызов заполняет предыдущие. Передавайте единичную normal. Без tangents создаётся вспомогательный tangent из normal, не UV-производная для корректного normal mapping.

Параметры
ИмяТипПо умолчанию
normalVector3—
normal

Единичная локальная normal для нужного освещения; направление упаковывается.

SurfaceSetTangentvoid
# SurfaceSetTangent
C#
public void SurfaceSetTangent(Plane tangent);

Задаёт tangent будущих вершин; первый вызов заполняет предыдущие. Plane.Normal хранит направление, D — handedness. Не геометрическая плоскость. Подготовьте согласованные normal и UV.

Параметры
ИмяТипПо умолчанию
tangentPlane—
tangent

Plane с единичным tangent xyz в Normal и handedness ±1 в D, согласованный с normal/UV.

SurfaceSetUVvoid
# SurfaceSetUV
C#
public void SurfaceSetUV(Vector2 uV);

Задаёт UV будущих вершин; первый вызов заполняет предыдущие. Ничего не разворачивает автоматически. Координаты действуют только при использовании материала/шейдера соответствующего канала.

Параметры
ИмяТипПо умолчанию
uVVector2—
uV

Локальные UV текстуры; обычно 0…1, но повторение зависит от материала/самплера.

SurfaceSetUV2void
# SurfaceSetUV2
C#
public void SurfaceSetUV2(Vector2 uV2);

Задаёт второй UV-канал с тем же правилом первого заполнения/последующих вершин. Не создаёт lightmap-развёртку и не запекает освещение.

Параметры
ИмяТипПо умолчанию
uV2Vector2—
uV2

Подготовленные координаты второго UV-канала; отсутствие overlap для lightmap метод не проверяет.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.