Class Mesh

Пакет: @aspose/3d (v24.12.0)

Mesh также доступен через импорт по подпути @aspose/3d/entities.

Mesh является основной сущностью полигональной геометрии в @aspose/3d. Он хранит позиции вершин как контрольные точки, определяет грани полигонов списками индексов вершин и поддерживает несколько слоёв данных элементов вершин, таких как нормали и UV‑координаты.

export class Mesh extends Geometry

ImageRenderOptions

A3DObject ← SceneObject ← Entity ← Geometry ← Mesh

ImageRenderOptions

Создайте единственную треугольную сетку, присоедините её к сцене и сохраните в формате GLB.

import { Scene, Vector4 } from '@aspose/3d';
import { Mesh } from '@aspose/3d/entities';

// Create the mesh and define three control points (vertices)
const mesh = new Mesh();
mesh.controlPoints.push(
  new Vector4(0, 1, 0, 1),   // apex
  new Vector4(-1, 0, 0, 1),  // bottom-left
  new Vector4(1, 0, 0, 1),   // bottom-right
);

// Define one triangular polygon using vertex indices
mesh.createPolygon(0, 1, 2);

// Attach the mesh to the scene and save (extension infers GLB format)
const scene = new Scene();
scene.rootNode.createChildNode('triangle', mesh);
scene.save('triangle.glb');
console.log(`Polygon count: ${mesh.polygonCount}`); // 1

ImageRenderOptions

ImageRenderOptionsImageRenderOptionsImageRenderOptions
controlPointsVector4[]Позиции вершин сетки. Каждая точка использует однородные координаты (x, y, z, w). Добавляйте точки, помещая их в этот массив перед определением полигонов.
polygonCountnumberТолько для чтения. Количество полигонов (граней), в данный момент определённых на сетке.
polygonsnumber[][]Только для чтения. Таблица индексов полигонов. Каждая запись — массив индексов контрольных точек, определяющих одну грань.
edgesnumber[]Список рёбер, используемый для маркировки жёстких рёбер и взвешивания сгибов.
vertexElementsVertexElement[]Коллекция слоёв элементов вершин (нормали, UV, цвета вершин и т.д.), прикреплённая к этой сетке.
visiblebooleanОтображается ли сетка. По умолчанию — true.
castShadowsbooleanОтбрасывает ли сетка тени в поддерживаемых рендерерах. По умолчанию — true.
receiveShadowsbooleanПолучает ли сетка тени от других объектов. По умолчанию — true.

ImageRenderOptions

createPolygon(…indices)

Определяет новую полигональную грань, используя предоставленные индексы контрольных точек. Индексы должны ссылаться на допустимые позиции в controlPoints.

createPolygon(...indices: number[]): void

ImageRenderOptions

...indices number[]

Три или более индексов, начинающихся с нуля, в controlPoints массиве, в порядке обхода против часовой стрелки.

ImageRenderOptions

void

ImageRenderOptions

import { Vector4 } from '@aspose/3d';
import { Mesh } from '@aspose/3d/entities';

const mesh = new Mesh();
mesh.controlPoints.push(
  new Vector4(0, 0, 0, 1),
  new Vector4(1, 0, 0, 1),
  new Vector4(1, 1, 0, 1),
  new Vector4(0, 1, 0, 1),
);
// Define a quad as two triangles, or a single quad polygon:
mesh.createPolygon(0, 1, 2, 3);
console.log(`Polygons: ${mesh.polygonCount}`); // 1

triangulate()

Преобразует все не треугольные полигоны в этой сетке в треугольники. Возвращает триангулированную сетку (может быть тем же экземпляром или новым).

triangulate(): Mesh

ImageRenderOptions

Mesh

Триангулированная сетка.

ImageRenderOptions

import { Vector4 } from '@aspose/3d';
import { Mesh } from '@aspose/3d/entities';

const mesh = new Mesh();
mesh.controlPoints.push(
  new Vector4(0, 0, 0, 1),
  new Vector4(1, 0, 0, 1),
  new Vector4(1, 1, 0, 1),
  new Vector4(0, 1, 0, 1),
);
mesh.createPolygon(0, 1, 2, 3); // quad
const triangulated = mesh.triangulate();
console.log(`Polygons after triangulation: ${triangulated.polygonCount}`); // 2

toMesh()

Возвращает сетку как Mesh экземпляр. Для Mesh объектов это операция тождественности; метод более значим для примитивных геометрических типов, наследующих от Geometry.

toMesh(): Mesh

ImageRenderOptions

Mesh

Этот объект Mesh.


static union(a, b)

NOT IMPLEMENTED. Этот метод определён в API, но бросает Error('union is not implemented') во время выполнения. Не вызывайте его в продакшн‑коде.

Выполняет булево объединение двух сеток. Результат содержит объединённый объём обоих входов.

static union(a: Mesh, b: Mesh): Mesh

ImageRenderOptions

a Mesh

Первый операнд сетки.

b Mesh

Второй операнд сетки.

ImageRenderOptions

Mesh

Новая mesh, представляющая объединение a и b.

ImageRenderOptions

import { Mesh } from '@aspose/3d/entities';

// Assumes meshA and meshB are already populated Mesh instances
const combined = Mesh.union(meshA, meshB);
console.log(`Union polygon count: ${combined.polygonCount}`);

static difference(a, b)

NOT IMPLEMENTED. Этот метод определён в API surface, но бросает Error('difference is not implemented') в runtime. Не вызывайте его в production code.

Выполняет Boolean difference, вычитая объём mesh b из mesh a.

static difference(a: Mesh, b: Mesh): Mesh

ImageRenderOptions

a Mesh

Базовая сетка.

b Mesh

Сетка, из которой вычитается a.

ImageRenderOptions

Mesh

Новая mesh, представляющая a минус b.

ImageRenderOptions

import { Mesh } from '@aspose/3d/entities';

const result = Mesh.difference(meshA, meshB);
console.log(`Difference polygon count: ${result.polygonCount}`);

static intersect(a, b)

NOT IMPLEMENTED. Этот метод определён в API, но бросает Error('intersect is not implemented') во время выполнения. Не вызывайте его в продакшн‑коде.

Выполняет булево пересечение двух сеток. Результат содержит только пересекающийся объём.

static intersect(a: Mesh, b: Mesh): Mesh

ImageRenderOptions

a Mesh

Первый операнд сетки.

b Mesh

Второй операнд сетки.

ImageRenderOptions

Mesh

Новая сетка, представляющая пересечение a и b.

ImageRenderOptions

import { Mesh } from '@aspose/3d/entities';

const overlap = Mesh.intersect(meshA, meshB);
console.log(`Intersection polygon count: ${overlap.polygonCount}`);

createElement(type, mapping?, reference?)

Создаёт новую VertexElement слой данных на этой сетке для пользовательских атрибутов вершин.

createElement(
  type: VertexElementType,
  mapping?: MappingMode,
  reference?: ReferenceMode
): VertexElement

ImageRenderOptions

type VertexElementType

Тип атрибута вершины, который нужно создать (например, VertexElementType.Normal).

mapping MappingMode (необязательно)

Как данные элементов отображаются на топологию сетки. По умолчанию MappingMode.ControlPoint.

reference ReferenceMode (необязательно)

Как индексы элементов ссылаются на массив данных. По умолчанию ReferenceMode.Direct.

ImageRenderOptions

VertexElement

Новосозданный слой вершинного элемента.


createElementUV(mapping, mappingMode?, referenceMode?)

Создаёт слой UV‑координат в этой сетке.

createElementUV(
  mapping: TextureMapping,
  mappingMode?: MappingMode,
  referenceMode?: ReferenceMode
): VertexElementUV

ImageRenderOptions

mapping TextureMapping

UV-канал, который нужно создать (например, TextureMapping.Diffuse).

mappingMode MappingMode (необязательно)

Как UV‑координаты сопоставляются с вершинами.

referenceMode ReferenceMode (необязательно)

Как данные индексов UV ссылаются на массив UV.

ImageRenderOptions

VertexElementUV

Новосозданный слой UV‑элементов.

ImageRenderOptions

import { Mesh } from '@aspose/3d/entities';
import { TextureMapping } from '@aspose/3d';

const mesh = new Mesh();
// ... define control points and polygons ...
const uvLayer = mesh.createElementUV(TextureMapping.Diffuse);
console.log(`UV element created: ${uvLayer !== undefined}`);
 Русский