/** @file RiverExportor.cpp
@brief
* Copyright (c) 2007,第九城市游戏研发中心
* All rights reserved.
*
* 当前版本:
* 作 者:和萌
* 完成日期:2008-
*
* 取代版本:
* 作 者:
* 完成日期:
*/
#include "StdAfx.h"
#include "RiverExportor.h"
#ifndef CODE_INGAME
#include
#include
#include
#include
#include
using namespace SceneCore;
//-----------------------------------------------------------------------------------------------
CRiverExportor::CRiverExportor(void)
{
m_p3dsFile = lib3ds_file_new();
}
CRiverExportor::~CRiverExportor(void)
{
lib3ds_file_free(m_p3dsFile);
}
bool CRiverExportor::SaveToFile(const char* pszFilePath)
{
return (lib3ds_file_save(m_p3dsFile, pszFilePath) == 1);
}
void CRiverExportor::Clear()
{
lib3ds_file_free(m_p3dsFile);
m_p3dsFile = lib3ds_file_new();
}
void CRiverExportor::AddRiverNode(NiTriShapePtr pTriGeom)
{
static int iNodeID = 0;
if ( !pTriGeom )
{
return;
}
// 获取原 NiTriBasedGeom 信息
int iNumVert = pTriGeom->GetVertexCount();
int iNumTri = pTriGeom->GetTriangleCount();
const NiTransform& kTransform = pTriGeom->GetWorldTransform();
// 为本结点创建 3dsNode
Lib3dsNode* p3dsNode = lib3ds_node_new_object();
p3dsNode->node_id = ++iNodeID;
sprintf_s(p3dsNode->name, "node_%d", iNodeID);
p3dsNode->type = LIB3DS_OBJECT_NODE;
p3dsNode->parent_id = LIB3DS_NO_PARENT;
lib3ds_file_insert_node(m_p3dsFile, p3dsNode); // 将 node 插入 file
// 创建 mesh
Lib3dsMesh* p3dsMesh = lib3ds_mesh_new(p3dsNode->name);
// 创建顶点列表
//顶点列表
lib3ds_mesh_new_point_list(p3dsMesh, iNumVert);
NiPoint3* pkVertices = pTriGeom->GetVertices();
for (int i=0; ipointL[i].pos[0] = kPos.x;
p3dsMesh->pointL[i].pos[1] = kPos.y;
p3dsMesh->pointL[i].pos[2] = kPos.z;
}
// 创建三角形列表
lib3ds_mesh_new_face_list(p3dsMesh, iNumTri);
for (int i=0; iGetTriangleIndices(i, i0, i1, i2);
p3dsMesh->faceL[i].points[0] = i0;
p3dsMesh->faceL[i].points[1] = i1;
p3dsMesh->faceL[i].points[2] = i2;
}
p3dsNode->type = LIB3DS_OBJECT_NODE;
lib3ds_file_insert_mesh(m_p3dsFile, p3dsMesh); // 将 mesh 插入 file
}
//end of class CRiverExportor
#endif