Open Invenor采用SoWriteAction或SoOutput写三维数据格式到文件,如下是具体实现。
#define COIN_DLL
#define SOWIN_DLL
// 加载COIN库文件
#ifdef _DEBUG
#pragma comment(lib, "SoWin1d.lib")
#pragma comment(lib, "Coin3d.lib")
#else
#pragma comment(lib, "SoWin1.lib")
#pragma comment(lib, "Coin3.lib")
#endif
// 添加COIN头文件-Window操作显示库和节点库
#include <Inventor/Win/SoWin.h>
#include <Inventor/Win/viewers/SoWinExaminerViewer.h>
#include <Inventor/nodes/SoCube.h>
#include <Inventor/nodes/SoDirectionalLight.h>
#include <Inventor/nodes/SoMaterial.h>
#include <Inventor/nodes/SoPerspectiveCamera.h>
#include <Inventor/nodes/SoTransform.h>
#include <Inventor/nodes/SoSeparator.h>
#include <Inventor/actions/SoWriteAction.h>
int main (int argc, char** argv)
{
HWND win = SoWin::init(argv[0]);
if (win == NULL) exit(1);
SoSeparator* root = new SoSeparator;
root->ref();
SoMaterial* mSilver = new SoMaterial;
mSilver->ambientColor.setValue(.2f, .2f, .2f);
mSilver->diffuseColor.setValue(.6f, .6f, .6f);
mSilver->specularColor.setValue(.5f, .5f, .5f);
mSilver->shininess = .5;
root->addChild(mSilver);
root->addChild(new SoCube);
SoWriteAction wa;
wa.getOutput()->openFile("test.iv");
wa.getOutput()->setBinary(FALSE);
wa.apply(root);
wa.getOutput()->closeFile();
SoWinExaminerViewer* x = new SoWinExaminerViewer(win);
x->setSceneGraph(root);
x->setTitle("foo");
x->show();
SoWin::show(win);
SoWin::mainLoop();
return 0;
}