[lang_ru]Запись и чтение внутри формата fbx имеет свои особенности, вкратце хотелось бы рассказать об этом.[/lang_ru][lang_en]Writing and reading in fbx format has its own characteristics, I would like to briefly talk about it.[/lang_en]

[lang_ru]
Запись и чтение осуществляется путем переопределения функций FbxStore, FbxRetrieve. При этом данные функции вызываются MoBu несколько раз:
1) для обработки аттрибутов — pStoreWhat & kAttributes
2) для отношений между нодами — pStoreWhat & kRelations
3) проход очистки (только при чтении) — pStoreWhat & kCleanup
4) проход специальных данных — pStoreWhat & kData
5) проход совмещения сцен — pStoreWhat & kMerge

Пользовательские данные чаще всего хранят и считывают с прохода обработки аттрибутов.

Запись\чтение

Если рассматривать со стороны типов переменных, то поддерживается 4 вида

целое число — FieldWriteI / FieldReadI
вещественное — FieldWriteD / FieldReadD
литерная переменная — FieldWriteC / FieldReadC
ссылка на объект — FieldWriteObjectReference / FieldReadObjectReference

Каждая такая функция при записи в качестве параметра принимает значение для записи, при чтении возвращает прочитанное значение. При этом можно указать параметр имени поля — field name. Но тут как раз и кроется особенность работы с полями.

Документ устроен следующим образом:
?спользование имени (заголовка) требует установить окончание поля. Это можно сделать с помощью функции pFbxObject->FieldWriteEnd()

Вот пример:
запишем некоторый диапазон в кадрах. Откроем именное поле с заголовком — «TimeSpan», куда поместим значения первого и последнего кадров.[/lang_ru]
[lang_en]
Writing and reading is carried out by overriding functions FbxStore, FbxRetrieve. In doing so, these functions are called MoBu several times:
1) for the processing of attributes — pStoreWhat & kAttributes
2) the relationship between plugs — pStoreWhat & kRelations
3) the pass of clean-up (only when reading) — pStoreWhat & kCleanup
4) the pass of special data — pStoreWhat & kData
5) pass of combining scenes — pStoreWhat & kMerge

Users often store data writing \ reading into the pass of processing attributes.

Writing \ Reading

When viewed from the types of variables, it supports 4 types of

integer — FieldWriteI / FieldReadI
real — FieldWriteD / FieldReadD
char array — FieldWriteC / FieldReadC
reference to an object — FieldWriteObjectReference / FieldReadObjectReference

Each feature in the record as the parameter takes the value to write, while reading back the value read. You can use the parameter field name. But as times and is characteristic of the field.

The document is arranged as follows:
The use of the name (title) you want to set the end of the field. This can be done using the pFbxObject-> FieldWriteEnd ()

Here’s an example:
write a range of frames. Open the name field with the title — «TimeSpan», which put the value of the first and the last frames.[/lang_en]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool ORTool_Template::FbxStore  ( HFBFbxObject pFbxObject, kFbxObjectStore pStoreWhat )
{
    if (pStoreWhat & kAttributes)
    {
        // store optical model time span       
        pFbxObject->FieldWriteBegin( "TimeSpan" );
        {
            pFbxObject->FieldWriteI( 0 );
            pFbxObject->FieldWriteI( 100 );
        }
        pFbxObject->FieldWriteEnd();
    }

    return true;
}

[lang_ru]Теперь при считывании сцены, осуществляем поиск одного именнованного поля и значений внутри него.[/lang_ru][lang_en]Now, reading the scene, search for a named field and values within it.[/lang_en]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool ORTool_Template::FbxRetrieve( HFBFbxObject pFbxObject, kFbxObjectStore pStoreWhat )
{
    if (pStoreWhat & kAttributes)
    {
        if (pFbxObject->FieldReadBegin( "Optical_TimeSpan" ) )
        {
            int startFrame, stopFrame;
            startFrame = pFbxObject->FieldReadI();
            stopFrame = pFbxObject->FieldReadI();
           
            pFbxObject->FieldReadEnd();
        }
    }
    return true;
}
[lang_en]FbxObject — Storing and retrieving a data[/lang_en][lang_ru]FbxObject — сохранение и загрузка данных[/lang_ru]
Метки:        

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *