reckfellENGINE

TriangleMesh

CPU-структура треугольников с BVH для локальных ray/segment-запросов.

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

TriangleMesh — собственный RefCounted для поиска пересечений, не ArrayMesh для рисования и не физическое тело. CreateFromFaces принимает плоский массив Vector3 тройками, не индексный буфер. Строит свой BVH-снимок: изменения исходного меша/массива не обновляют его автоматически. Для собственного объекта используйте Dispose.

При построении позиции округляются snappedf(0.0001) и объединяются по округлённым координатам. GetFaces поэтому не обязан побитно совпадать с исходными float. Учитывайте единицы и масштаб: это не точное пересечение микрогеометрии любой величины.

IntersectRay задаётся началом и ненулевым направлением, IntersectSegment — началом и концом. Все точки должны быть в координатах BVH: Transform MeshInstance3D автоматически не применяется. Оба метода возвращают собственный Dictionary. Пустой словарь означает промах либо ещё не построенный BVH. При попадании ключи position (Vector3), normal (Vector3), face_index (int). Нормаль разворачивается против запроса, а не обязательно совпадает с исходным winding. Выберите результат по ключам после проверки Count и освободите словарь.

Возвращается ближайшее принятое пересечение, не все попадания, collider, UV или список поверхностей игрового мира. face_index относится к тройке текущего набора faces, не к Entity/material ID. Равные расстояния, вырожденные треугольники и точность на крайних масштабах этим обзором не приняты.

В общем наборе 34 headless-проверок протестированы новый пустой объект, построение, ближайший ray/segment, противоположная нормаль, копия GetFaces, span-перестроение и округление. Это CPU-проверка; графика и физический мир не запускались.

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

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

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

Создаёт собственный RefCounted без валидного BVH. GetFaces и запросы до построения дают пустые результаты.

Методы5

CreateFromFaces2 перегрузки
# CreateFromFaces · 1/2
C#
public bool CreateFromFaces(Vector3[] faces);

Заменяет BVH непустым flat-массивом Vector3 тройками. Позиции snapped к шагу 0.0001; одинаковые округлённые координаты объединяются. При некорректной длине диагностируется, valid сбрасывается: не рассчитывайте на сохранение старого валидного BVH. Array/span имеют одну семантику.

Параметры
ИмяТипПо умолчанию
facesVector3[]—
faces

Непустой массив конечных Vector3 с длиной кратной 3; каждая тройка — треугольник. Не индексный список.

Возвращает bool

true при валидном построенном BVH; false не гарантирует сохранение предыдущей структуры.

# CreateFromFaces · 2/2
C#
public bool CreateFromFaces(ReadOnlySpan<Vector3> faces);

Заменяет BVH непустым flat-массивом Vector3 тройками. Позиции snapped к шагу 0.0001; одинаковые округлённые координаты объединяются. При некорректной длине диагностируется, valid сбрасывается: не рассчитывайте на сохранение старого валидного BVH. Array/span имеют одну семантику.

Параметры
ИмяТипПо умолчанию
facesReadOnlySpan<Vector3>—
faces

Непустой массив конечных Vector3 с длиной кратной 3; каждая тройка — треугольник. Не индексный список.

Возвращает bool

true при валидном построенном BVH; false не гарантирует сохранение предыдущей структуры.

GetFacesVector3[]
# GetFaces
C#
public Vector3[] GetFaces();

Возвращает managed-копию треугольных углов текущего BVH в группах по три. Координаты уже округлены; изменение результата не меняет BVH. При отсутствии валидной структуры пусто.

Возвращает Vector3[]

Новый Vector3[] углов тройками либо пустой массив.

IntersectRayReckfell.Collections.Dictionary
# IntersectRay
C#
public Reckfell.Collections.Dictionary IntersectRay(Vector3 begin, Vector3 dir);

Ищет ближайшее принятое пересечение впереди begin вдоль ненулевого dir. Это бесконечный луч, не отрезок begin→dir. Нормаль результата направлена против запроса. Локальные координаты/снимок, без physics layers и автоматических Transform3D.

Параметры
ИмяТипПо умолчанию
beginVector3—
dirVector3—
begin

Начало запроса в координатах BVH.

dir

Ненулевое направление луча, обычно нормализованное; не конечная точка.

Возвращает Reckfell.Collections.Dictionary

Собственный Dictionary: position, normal, face_index при попадании, иначе пусто. Освободите после использования.

IntersectSegmentReckfell.Collections.Dictionary
# IntersectSegment
C#
public Reckfell.Collections.Dictionary IntersectSegment(Vector3 begin, Vector3 end);

Ищет ближайшее принятое пересечение конечного begin→end. Возвращает только одно попадание; нормаль развёрнута против движения. Не является contains/overlap-проверкой всего тела.

Параметры
ИмяТипПо умолчанию
beginVector3—
endVector3—
begin

Начало запроса в координатах BVH.

end

Конец отрезка в координатах BVH, не направление.

Возвращает Reckfell.Collections.Dictionary

Собственный Dictionary: position, normal, face_index при попадании, иначе пусто. Освободите после использования.

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

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

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

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