/** @file NiLightMapMaterialHelper.h
@brief 给 nif 文件赋以 NiLightMapMaterial 的辅助函数集合,
包括展 uv, 合并 geometry, 合并 light map 等功能
* Copyright (c) 2007,第九城市游戏研发中心
* All rights reserved.
*
* 当前版本:
* 作 者:Shi Yazheng
* 完成日期:2009-09-07
*
* 取代版本:
* 作 者:
* 完成日期:
*/
#ifndef NILIGHTMAPMATERIALHELPER_H
#define NILIGHTMAPMATERIALHELPER_H
#ifndef CODE_INGAME
// 这个类只在编辑器中时候,客户端中不使用
#include
#include
// NiStandardMaterial 名称
#define STANDARD_MATERIAL_NAME "NiStandardMaterial"
#define LIGHT_MAP_MATERIAL_NAME "LightMapMaterial"
/// 辅助类, 静态函数集合
class MAIN_ENTRY NiLightMapMaterialHelper
{
// 顶点结构
struct sMeshVert
{
D3DXVECTOR3 vPos;
D3DXVECTOR2 vUV;
};
public:
/// 将 NiNode 下所有 NiGeometry 转换为 light map material
static NiNode* ConvertToLightMapMaterial(NiNode* pkOrigNode, int& iNumGeomConv, int& iNumGeomFail, std::vector& arrInfo);
/// 判断一个 geometry 是否可以转换为 light map material
static bool VerifyToLightMapMaterial(NiGeometry* pkGeomchar, char szInfo[256]);
/// 为 pkGeom 添加一套新 uv, 返回新 uv id
static int AddUVSet(NiGeometry* pkGeom);
/// 展平 pkGeom 的第 uiID 套 UV (用 dx 的函数)
static NiTriShape* FlatUV(NiGeometry* pkGeom, unsigned int uiID);
/// 将 NiGeometry 转换到 D3D Mesh, 只拷贝顶点.
static LPD3DXMESH ConvertToD3DMesh(NiGeometry* pkGeom);
/// 将 D3DMesh 的 uv 复制给 pkGeom
static NiTriShape* ApplyUVToGeometry(LPD3DXMESH pD3DMesh, NiGeometry* pkGeom, DWORD* pRemapArray, unsigned int uiID);
// 添加 shader map 0 到 geometry 的 texturing property
static void AddShaderMap(NiGeometry* pkGeom, int iTexSetID);
protected:
};
#endif // CODE_INGAME
#endif // NILIGHTMAPMATERIALHELPER_H