eye

SoOutput - выгрузка сцены в файл

Небольшая функция, позволяющая выгружать в файл части графа или весь граф полностью, для последующей его загрузки и использования.

saver.cpp
1 2 3 4 5 6 7 8 9 10 11    #include <Inventor/SoOutput.h> #include <Inventor/actions/SoWriteAction.h> void Save( const char * fileName, SoNode * root ) { SoOutput output; output.openFile( fileName ); SoWriteAction wa( &output ); wa.apply( root ); }
eye

SoInput - Загрузчик сцен

В библиотеке Coin3D есть возможность сохранения и последующей загрузки граф-сцены, полностью или частично.
Для загрузки используется объект класса SoInput и статические функции класса SoDB.
Для сохранения используется объект класса SoOutput.

В этом примере создаётся утилита для просмотра сохранённых граф-сцен. На её примере можно разобраться, как происходит загрузка граф-сцены из файла и последующая работа с загруженной граф-сценой.
Как видно из кода, это не консольное, а оконное MFC приложение.

Loader.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47    #define VC_EXTRALEAN #include <afxext.h> #include <Inventor/Win/SoWin.h> #include <Inventor/Win/viewers/SoWinExaminerViewer.h> #include <Inventor/nodes/SoSeparator.h> #include <Inventor/SoInput.h> class CLoaderApp : public CWinApp { public: virtual BOOL InitInstance() { CWinApp::InitInstance(); while(true) { if( IDYES != AfxMessageBox( _T("Load next Inventor file?"), MB_YESNO) ) break; CFileDialog dlg( TRUE, _T(".iv"), NULL, 0, _T("OI Files (*.iv)|*.iv||") ); if( IDOK != dlg.DoModal() ) break; const CStringA fullPath( dlg.GetPathName() ); HWND wnd = SoWin::init( "Viewer" ); SoInput input; input.openFile( fullPath.GetString() ); SoSeparator * root = SoDB::readAll( &input ); SoWinExaminerViewer * viewer = new SoWinExaminerViewer(wnd ); viewer->setSceneGraph( root ); viewer->setSize( SbVec2s(800, 600) ); viewer->show(); SoWin::mainLoop(); }; return FALSE; } }; CLoaderApp theApp
eye

SoUnits

#include <Inventor/nodes/SoUnits.h>

SoUnits - Узел, преобразующий текущие единицы длины

Этот узел определяет однородное 3D масштабирование в соответствии с указанными единицами измерения. По умолчанию длина задаётся в метрах.
Collapse )
eye

SoTransform

#include <Inventor/nodes/SoTransform.h>

SoTransform - Узел, задающий 3D геометрические трансформации

Этот узел задаёт неоднородные трансформации, вращения и перемещения. Все трансформации происходят вокруг текущей точки начала координат.
Collapse )
eye

SoTextureCoordinatePlane

#include <Inventor/nodes/SoTextureCoordinatePlane.h>

SoTextureCoordinatePlane - Узел, задающий текстурные координаты проекцией на плоскость

Этот узел создаёт текстурные координаты из точек на поверхности путём их проекции на плоскость.
eye

SoTextureCoordinateEnvironment

#include <Inventor/nodes/SoTextureCoordinateEnvironment.h>

SoTextureCoordinateEnvironment - Узел, задающий текстурные координаты, проецируемые на сферу

Этот узел создаёт текстурные координаты путём проецирования точек поверхности на окружающую её сферу.
eye

SoTextureCoordinateDefault

#include <Inventor/nodes/SoTextureCoordinateDefault.h>

SoTextureCoordinateDefault - Узел, удаляющий текстурные координаты из конвеера

Этот узел изменяет текущее состояние обхода указывая, что текущие текстурные координаты или функция, задающая текстурные координаты, не определены. Это может быть нужно для объектов, которые имеют собственные текстурные координаты.
eye

SoTextureCoordinate2

#include <Inventor/nodes/SoTextureCoordinate2.h>

SoTextureCoordinate2 - 2D текстурные координаты узлов

Этот узел задаёт двумерные координаты узлов для наложения текстуры на поверхности. Они замещают текущие текстурные координаты в конвеере рендеринга.
Текстурные координаты задаются из диапазона [0;1] являющегося габаритом текстуры. Таким образом текстурные координаты не зависят от фактического размера текстуры.