Как да поправим грешки в 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: Отстраняване на проблеми с координатната система
Моделите може да изглеждат завъртени, огледално отразени или мащабирани неправилно поради разлики в координатните системи между форматите.
Дясна ръка срещу лява ръка, 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 |
Грешка в тип на TypeScript при node.entity | Широк тип на обекта | Използвай instanceof Mesh защита |
Често задавани въпроси
Как да докладвам грешка при парсиране?
Отворете проблем в GitHub хранилище с името на формата, минимален възпроизведим файл и точното съобщение за грешка.
Защо някои мрежи (meshes) имат нулев брой контролни точки?
Някои OBJ групи дефинират само координати на текстура или нормали без данни за позиция. Проверете mesh.controlPoints.length > 0 преди обработка.
Библиотеката тихо игнорира грешките при парсиране. Как да ги открия?
Обвийте scene.open() в блок try/catch. Ако файлът е повреден, библиотеката може да хвърли изключение или да зареди частична сцена:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}