📄 loadmeshes.h
字号:
// ObjMesh_t.h: interface for the ObjMesh_t class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(_CGE_LOADMESHES_H_)
#define _CGE_LOADMESHES_H_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <vector>
// 确认结构以字节对齐
#pragma pack(push, 1)
namespace cge_mesh
{
//--------------------------------------------------------------------------------
// common structures
//--------------------------------------------------------------------------------
struct TexCoord_s
{
float u;
float v;
};
struct Vector3_s
{
float x;
float y;
float z;
};
//--------------------------------------------------------------------------------
// structures for Obj
//--------------------------------------------------------------------------------
struct ObjTriangle_s // Obj模型的表面结构
{
unsigned int m_VertexIndices[3]; // 顶点索引
unsigned int m_NormalIndices[3]; // 顶点法向索引
unsigned int m_TexCoordIndices[3]; // 纹理索引
};
struct ObjMesh_s
{ // Obj模型
std::vector<TexCoord_s> m_TexCoords; // Obj模型的纹理坐标数据
std::vector<Vector3_s> m_Vertices; // Obj模型的顶点坐标数据
std::vector<Vector3_s> m_Normals; // Obj模型的顶点法向数据
std::vector<ObjTriangle_s> m_Triangles; // Obj模型的三角形面数据
bool m_bHasTexCoords; // 是否有纹理坐标数据
bool m_bHasNormals; // 是否有顶点法向量数据
};
//--------------------------------------------------------------------------------
// structures for Md2
//--------------------------------------------------------------------------------
struct Md2Header_s // Md2的文件头
{
int m_iMagicNum; // 标识号"IDP2"(844121161)
int m_iVersion; // Version:8
int m_iSkinWidthPx; // 纹理宽度
int m_iSkinHeightPx; // 纹理高度
int m_iFrameSize; // 帧的大小
int m_iNumSkins; // 纹理文件个数
int m_iNumVertices; // 顶点坐标数据个数
int m_iNumTexCoords; // 纹理坐标数据个数
int m_iNumTriangles; // 三角形的数目
int m_iNumGLCommands; // OpenGL优化命今数目
int m_iNumFrames; // 帧的的数目
int m_iOffsetSkins; // 纹理数据在文件中的偏移(相对于文件头)
int m_iOffsetTexCoords; // 纹理坐标数据在文件中的偏移(相对于文件头)
int m_iOffsetTriangles; // 三角形数据在文件中的偏移(相对于文件头)
int m_iOffsetFrames; // 帧数据在文件中的偏移(相对于文件头)
int m_iOffsetGLCommands; // OpenGL优化数据在文件中的偏移(相对于文件头)
int m_iFilesize; // 文件大小
};
struct Md2Triangle_s // Md2模型的表面结构
{
unsigned short m_sVertIndices[3]; // 顶点索引
unsigned short m_sTexIndices[3]; // 纹理索引
};
struct Md2Frame_s // Md2模型的帧结构
{
float m_fScale[3]; // 此帧的顶点缩放数据
float m_fTrans[3]; // 此帧的顶点平移数据
char m_szName[16]; // 帧名
std::vector<Vector3_s> m_Vertices; // 此帧的顶点数据
};
struct Md2Mesh_s // Md2模型
{
typedef struct {char name[256];} skinname;
Md2Header_s m_Header; // Md2的文件头
std::vector<skinname> m_Skins; // Md2模型的纹理文件数据
std::vector<Md2Frame_s> m_Frames; // Md2模型的帧数据
std::vector<TexCoord_s> m_TexCoords; // Md2模型的纹理坐标数据
std::vector<Md2Triangle_s> m_Triangles; // Md2模型的纹理坐标数据
std::vector<long> m_GLCommands; // Md2模型的OpenGL优化命今数据
};
//--------------------------------------------------------------------------------
// structures for Ms3d
//--------------------------------------------------------------------------------
struct Ms3dHeader_s // Ms3d的文件头
{
char m_szFlags[10]; // Ms3d的标识"MS3D000000"
int m_iVersion; // Version:3 or 4
};
struct Ms3dVertex_s // Ms3d的顶点结构
{
unsigned char m_ucFlags; // 编辑标识(0 = visible && selected, 1 = selected, 2 = hidden 3 = hidden && selected)
Vector3_s m_vVert; // 顶点数据
char m_iBone; // 骨骼ID(-1 = 无骨骼)
unsigned char m_ucUnused;
};
struct Ms3dTriangle_s // Ms3d的表面结构
{
unsigned short m_usFlags; // 编辑标识
unsigned short m_VertexIndices[3]; // 顶点索引
Vector3_s m_vNormals[3]; // 表面法向
float m_TexCoords[2][3]; // 纹理坐标([0][0] = u1, [0][1] = u2, [0][2] = u3, [1][0] = v1, [1][1] = v2, [1][2] = v3)
unsigned char m_ucSmoothing;
unsigned char m_ucGroup; // 组号
};
struct Ms3dGroup_s // Ms3d的组结构
{
unsigned char m_ucFlags; // 编辑标识
char m_szName[32]; // 组名
unsigned short m_usNumTriangles; // 组内包含的三角形数目
std::vector<unsigned short> m_TriangleIndices; // 三角形索引
char m_cMaterial; // 材质索引( -1 = 无材质)
};
struct Ms3dMaterial_s // Ms3d的材质结构
{
char m_szName[32]; // 材质名
float m_Ambient[4]; // Ambient values
float m_Diffuse[4]; // Diffuse values
float m_Specular[4]; // Specular values
float m_Emissive[4]; // Emissive values
float m_fShininess; // 材质光滑值(0 - 128)
float m_fTransparent; // 材质透明值(0 - 1)(0 = completely opaque, 1 = completely transprent)
char m_cMode; // Unused
char m_szTextureFile[128]; // 纹理文件名
char m_szAlphaMapFile[128]; // 透明贴图文件名
};
struct Ms3dMesh_s // Ms3d模型
{
Ms3dHeader_s m_Header; // Ms3d的文件头
std::vector<Ms3dVertex_s> m_Vertices; // 顶点数据
std::vector<Ms3dTriangle_s> m_Triangles; // 三角形数据
std::vector<Ms3dGroup_s> m_Groups; // 组数据
std::vector<Ms3dMaterial_s> m_Materials; // 材质数据
};
//--------------------------------------------------------------------------------
// The prototype of functions for loading meshes
//--------------------------------------------------------------------------------
bool LoadObjMesh(const char *pFilename, ObjMesh_s &Mesh);
bool LoadMd2Mesh(const char *pFilename, Md2Mesh_s &OutMesh);
bool LoadMs3dMesh(const char *pFilename, Ms3dMesh_s &Mesh);
}
#pragma pack(pop, 1)
#endif // !defined(_CGE_LOADMESHES_H_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -