Как да поправим грешки в 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(). Използването на общи опции може да попречи на откриването на формата.File path is wrong: библиотеката тихо зарежда празна сцена, ако файлът не бъде намерен:
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: Поправка на проблеми с координатната система
Моделите могат да се появят завъртени, огледално отразени или неправилно мащабирани поради разлики в координатните системи между форматите.
Дясна ръка срещу лява ръка, Y-горе срещу Z-горе:
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 MB, увеличете размера на 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 |
Грешка в типa на TypeScript за node.entity | Широк тип на обекта | Използвайте instanceof Mesh guard |
Често задавани въпроси
Как да докладвам за грешка при парсиране?
Отворете проблем в 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);
}