Как да поправим грешки в 3D модели в TypeScript

Как да поправим грешки в 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}`);

Общи причини:

  1. Грешни опции за формат: за OBJ винаги предавайте new ObjLoadOptions(). Използването на общи опции може да попречи на откриването на формата.

  2. 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());
  1. 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);
}

Вижте още

 Български