Пример функций сетки glTF
Contents
[
Hide
]
Создание glTF файлов с EXT_mesh_features
Этот пример демонстрирует, как создать glTF файл с расширением EXT_mesh_features, используя API Aspose.3D.
Объяснение кода
Следующий код на C# создает сетку с контрольными точками и полигонами, а затем добавляет идентификаторы признаков к контрольным точкам перед сохранением в glTF файл:
// Этот пример создаст glTF файл с EXT_mesh_features
// Сначала мы создаем сетку
var mesh = new Mesh();
// Добавляем контрольные точки (вершины) в сетку
// Первый набор из четырех точек создает квадрат в плоскости XY при y=1
mesh.ControlPoints.Add(new Vector4(0, 1, 0)); // Точка 0
mesh.ControlPoints.Add(new Vector4(2, 1, 0)); // Точка 1
mesh.ControlPoints.Add(new Vector4(2, 2, 0)); // Точка 2
mesh.ControlPoints.Add(new Vector4(1, 2, 0)); // Точка 3
// Второй набор из четырех точек создает еще один квадрат в плоскости XY при y=0
mesh.ControlPoints.Add(new Vector4(3, 0, 0)); // Точка 4
mesh.ControlPoints.Add(new Vector4(4, 0, 0)); // Точка 5
mesh.ControlPoints.Add(new Vector4(4, 1, 0)); // Точка 6
mesh.ControlPoints.Add(new Vector4(3, 1, 0)); // Точка 7
// Создаем треугольные грани (полигоны) из контрольных точек
// Первый квадрат (точки 0-3) делится на два треугольника
mesh.CreatePolygon(0, 1, 2); // Треугольник 0-1-2
mesh.CreatePolygon(0, 2, 3); // Треугольник 0-2-3
// Второй квадрат (точки 4-7) также делится на два треугольника
mesh.CreatePolygon(4, 5, 6); // Треугольник 4-5-6
mesh.CreatePolygon(4, 6, 7); // Треугольник 4-6-7
// Затем мы создаем элемент пользовательских данных для хранения идентификаторов признаков
// Это свяжет идентификаторы признаков с контрольными точками
var featureId = (VertexElementUserData)mesh.CreateElement(
VertexElementType.UserData, // Тип элемента
MappingMode.ControlPoint, // Применять к контрольным точкам
ReferenceMode.Direct // Прямое отображение (не индексировано)
);
// Назначаем идентификаторы признаков каждой контрольной точке
// Первые четыре точки получают ID 0, следующие четыре получают ID 1
featureId.Data = new float[] { 0, 0, 0, 0, 1, 1, 1, 1 };
// Устанавливаем специальное имя атрибута, соответствующее спецификации EXT_mesh_features
// Формат _FEATURE_ID_<n> распознается экспортером glTF
featureId.Name = "_FEATURE_ID_0";
// Сохраняем сетку в файл glTF Binary (GLB)
// Экспортер автоматически сгенерирует данные расширения EXT_mesh_features
// Используем относительный путь для выходного файла
(new Scene(mesh)).Save("mesh_feature.glb");
Ключевые концепции
Создание сетки
- Класс
Mesh
представляет собой полигональную сетку геометрии - Контрольные точки определяют вершины сетки
- Метод
CreatePolygon
создает треугольные грани между контрольными точками
Идентификаторы признаков
- Идентификаторы признаков позволяют группировать геометрию внутри сетки
- Реализованы с помощью
VertexElementUserData
со специальной конвенцией именования _FEATURE_ID_0
указывает на то, что это поток идентификаторов признаков- Можно создать несколько потоков идентификаторов признаков с возрастающими индексами
Назначение данных
- Идентификаторы признаков хранятся как значения с плавающей точкой
- Каждая контрольная точка получает соответствующее значение идентификатора признака
- В этом примере мы используем два различных идентификатора признаков: 0 и 1
Экспорт файла
- Сохранение в формате GLB сохраняет все функции, включая EXT_mesh_features
- Aspose.3D автоматически обрабатывает генерацию расширения
- Полученный файл содержит метаданные о признаках сетки
- Использование относительных путей делает код более переносимым и упрощает его запуск в различных средах