Вступ

Aspose.3D FOSS для TypeScript (@aspose/3d) — це бібліотека формату 3D-файлів з відкритим кодом, ліцензована під MIT, головним чином призначена для Node.js. Розробники, які створюють переглядачі 3D-моделей, конвертери форматів, інструменти обробки геометрії або серверні 3D-конвеєри, можуть встановити її однією командою (див. Посібник з встановлення) і одразу почати завантажувати, конструювати та експортувати 3D-контент. Бібліотека використовує require('fs') та Buffer з Node.js; використання в браузері вимагає відповідних shim-ів для цих API і офіційно не підтримується.

Бібліотека підтримує основні формати обміну — OBJ, glTF 2.0 / GLB, STL, 3MF та COLLADA як для імпорту, так і для експорту. Класи імпортера/експортера FBX існують, але ще не інтегровані в автоматичне розпізнавання форматів. API графа сцени відображає модель, знайому з інструментів 3D-моделювання: Scene містить rootNode, кожен Node може мати дочірні вузли та об’єкти сутностей (Mesh, Camera, Light), і ієрархія трансформацій повністю доступна для читання та запису.

Ключові особливості

  • Багатоформатний ввід/вивід: Імпорт і експорт OBJ (з .mtl матеріалами), glTF 2.0 / GLB, STL (бінарний і ASCII), 3MF та COLLADA як з шляхів до файлів, так і у пам’яті Buffer об’єктів. Підтримка FBX ще не підключена до автоматичного визначення.
  • Граф сцени API: Scene, Node, Mesh, Camera, Light ієрархія з повним управлінням parent/child; рекурсивно обходити вузли через node.childNodes
  • Система матеріалів PBR: матеріали Lambert, Phong та PBR (metallic/roughness), доступні через node.material
  • Операції з сітками: Доступ до необроблених даних вершин через mesh.controlPoints (масив Vector4), індекси полігонів через mesh.polygonCount, та канали елементів вершин через mesh.getElement()
  • Математичні утиліти: Vector2, Vector3, Vector4, Matrix4, Quaternion, і типи обмежувальних коробок для просторових обчислень
  • Система анімації: Ключова анімація з AnimationClip, AnimationChannel, і інтерполяційні криві (лінійна, Безьє, TCB-сплайн)
  • Опції, специфічні для формату: По-форматний LoadOptions / SaveOptions класи керують перевертанням координат, масштабом, завантаженням матеріалів та іншим

Початок роботи

Зберіть пакет з вихідного коду. Потрібен Node.js 18 або новіший; рекомендується TypeScript 5.0+.

git clone https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-TypeScript.git
cd Aspose.3D-FOSS-for-TypeScript
npm install
npm run build

Завантажте файл OBJ і огляньте сцену:

import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';

const scene = new Scene();
const options = new ObjLoadOptions();
options.enableMaterials = true;
scene.open('model.obj', options);

for (const node of scene.rootNode.childNodes) {
    if (node.entity && 'controlPoints' in node.entity) {
        const mesh = node.entity as any;
        console.log(`Mesh "${node.name}": ${mesh.controlPoints.length} vertices`);
    }
}

Граф сцени API

Кожна сцена — це дерево Node об’єктів, кореневе у scene.rootNode. Побудуйте ієрархію за допомогою addChildNode(), приєднуйте сутності, такі як Camera або Light, до вузла через його властивість entity, і читайте локальне або глобальне (world-space) перетворення кожного вузла за допомогою transform та globalTransform.

import { Scene, Node, Camera, Light } from '@aspose/3d';

const scene = new Scene();

const cameraNode = new Node('MainCamera');
cameraNode.entity = new Camera('MainCamera');
scene.rootNode.addChildNode(cameraNode);

const lightNode = new Node('KeyLight');
lightNode.entity = new Light('KeyLight');
scene.rootNode.addChildNode(lightNode);

for (const child of scene.rootNode.childNodes) {
    console.log(`${child.name}: ${child.entity?.constructor.name}`);
}

Математичні утиліти

Vector3, Vector4, Matrix4 і Quaternion підтримують усі геометричні операції в бібліотеці. Vector3 і Vector4 надають компоненти x/y/z(/w) плюс length, dot() і cross(); Matrix4 — це 4×4 сітка, доступна через m00–m33 з transpose() і concatenate(); Quaternion забезпечує normalize(), conjugate(), inverse() та dot() для обчислень обертання.

import { Vector3, Quaternion, Matrix4 } from '@aspose/3d/utilities';

const position = new Vector3(1.0, 2.0, 3.0);
const rotation = new Quaternion(1.0, 0.0, 0.0, 0.0);
const transform = new Matrix4();

console.log(`length=${position.length} determinant=${transform.determinant}`);
console.log(`rotation w=${rotation.w} x=${rotation.x} y=${rotation.y} z=${rotation.z}`);

Дивіться також

Пов’язані ресурси