-
[lang_en]FbxObject – Storing and retrieving a data[/lang_en][lang_ru]FbxObject – сохранение и загрузка данных[/lang_ru]
Дата: Август 20th, 2009 Neill Комментариев нет[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 & kMergeUsers 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 / FieldReadObjectReferenceEach 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
15bool 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]
MotionBuilder, Программирование C++, OpenReality, Tutorials1
2
3
4
5
6
7
8
9
10
11
12
13
14
15bool 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;
}Добавить комментарий


Свежие комментарии