Вступ
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}`);
Дивіться також
- Як завантажити 3D-моделі в TypeScript
- Як експортувати glTF в TypeScript
- Підтримка форматів
- API Reference