Як виправити помилки 3D‑моделей у TypeScript
У цьому посібнику розглянуто найпоширеніші помилки при використанні @aspose/3d для TypeScript та Node.js, з практичними виправленнями для кожної.
Покроковий посібник
Крок 1: Перевірка встановлення та версій
Переконайтеся, що ви використовуєте підтримувану версію Node.js (18, 20 або 22) і пакет встановлено:
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed versionЯкщо пакет не знайдено, перевстановіть:
npm install @aspose/3dКрок 2: Виправити помилки розв’язання модулів
Помилка: Cannot find module '@aspose/3d/formats/obj'
Імпорт підшляхів вимагає експорту пакетів Node.js 12.7+. У TypeScript встановіть правильне розв’язання модулів:
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node16",
"strict": true
}
}Для ESM‑проектів використовуйте "module": "ES2022" і "moduleResolution": "bundler".
Крок 3: Налагодження порожньої сцени після завантаження
Якщо scene.rootNode.childNodes порожній після scene.open():
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
console.log(`Child nodes: ${scene.rootNode.childNodes.length}`);Загальні причини:
Неправильні параметри формату: для OBJ, завжди передавайте
new ObjLoadOptions(). Використання загальних параметрів може завадити виявленню формату.Шлях до файлу неправильний: бібліотека без повідомлення завантажує порожню сцену, якщо файл не знайдено:
import * as fs from 'fs';
const filePath = 'model.obj';
if (!fs.existsSync(filePath)) {
throw new Error(`File not found: ${filePath}`);
}
const scene = new Scene();
scene.open(filePath, new ObjLoadOptions());- OBJ файл використовує нестандартні розриви рядків: відкрийте його в текстовому редакторі та переконайтеся, що файл дійсний.
Крок 4: Виправити проблеми з системою координат
Моделі можуть виглядати повернутими, віддзеркаленими або масштабованими неправильно через відмінності у системах координат між форматами.
Правостороння vs лівостороння, Y-up vs Z-up:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const options = new ObjLoadOptions();
options.flipCoordinateSystem = true; // Swap Y and Z axes
const scene = new Scene();
scene.open('model.obj', options);Проблеми масштабу (наприклад, STL у міліметрах проти glTF у метрах):
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const options = new ObjLoadOptions();
options.scale = 0.001; // Convert millimeters to meters
const scene = new Scene();
scene.open('model.obj', options);Крок 5: Вирішення проблем пам’яті з великими файлами
Для файлів, розмір яких перевищує 100 МБ, збільшіть розмір heap у Node.js:
node --max-old-space-size=4096 convert.jsАбо встановіть його в package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}Обробляйте великі файли по одному, а не паралельно, щоб уникнути проблем з піковою пам’яттю.
Загальна довідка про помилки
| Помилка | Ймовірна причина | Виправлення |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Конфігурація розв’язання модулів | Встановіть moduleResolution: node16 у tsconfig |
scene.rootNode.childNodes порожній | Неправильні параметри або файл не знайдено | Перевірте шлях до файлу; передайте правильний *LoadOptions |
| Геометрія виглядає віддзеркаленою/перевернутою | Несумісність системи координат | Встановіть flipCoordinateSystem = true |
| Геометрія масштабована неправильно | Різниця одиниць між форматами | Встановіть scale у параметрах завантаження |
ENOMEM або процес завершено | Недостатньо пам’яті для великого файлу | Збільшіть --max-old-space-size |
Помилка типу TypeScript у node.entity | Загальний тип сутності | Використайте instanceof Mesh guard |
Поширені запитання
Як повідомити про помилку парсингу?
Відкрийте issue у GitHub repository з назвою формату, мінімальним відтворюваним файлом та точним повідомленням про помилку.
Чому у деяких сіток нуль контрольних точок?
Деякі групи OBJ визначають лише координати текстури або нормалі без даних про позицію. Перевірте mesh.controlPoints.length > 0 перед обробкою.
Бібліотека беззвучно ігнорує помилки синтаксичного аналізу. Як їх виявити?
Обгорніть scene.open() у блок try/catch. Якщо файл пошкоджений, бібліотека може кинути виключення або завантажити часткову сцену:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}