2021SC@SDUSC
目录
本章我们继续来讲OvRendering中的函数。首先需要简单了解两种类型的函数,这将会对以后的章节有所帮助。
Parser
1.IModelParser
/**
* Interface for any model parser
*/
class IModelParser
{
public:
/**
* Load meshes from a file
* Return true on success
* @param p_filename
* @param p_meshes
* @param p_parserFlags
*/
virtual bool LoadModel
(
const std::string& p_fileName,
std::vector<Mesh*>& p_meshes,
std::vector<std::string>& p_materials,
EModelParserFlags p_parserFlags
) = 0;
};
我们可以看到这是一个用于解析模型的接口类,其中只有一个纯虚函数,通过注释我们了解到,它的作用是从文件中加载网格信息。函数的参数包括了文件名、网格容器的引用、材质贴图的引用,以及一个EModelParserFlags类型的解析器枚举值。
LoadModel将会返回当前文件的网格是否加载成功,它的具体操作将会在派生的子类中实现。
2.EModelParserFlags
下列的枚举值与内联函数是对EModelParserFlags的补充,主要用于对模型中的区分与识别不同的模型节点,并对其进行算术运算。
/**
* Some flags that can be used for model parsing
*/
enum class EModelParserFlags : uint32_t
{
NONE = 0x0,
CALC_TANGENT_SPACE = 0x1,
JOIN_IDENTICAL_VERTICES = 0x2,
MAKE_LEFT_HANDED = 0x4,
TRIANGULATE = 0x8,
REMOVE_COMPONENT = 0x10,
GEN_NORMALS = 0x20,
GEN_SMOOTH_NORMALS = 0x40,
SPLIT_LARGE_MESHES = 0x80,
PRE_TRANSFORM_VERTICES = 0x100,
LIMIT_BONE_WEIGHTS = 0x200,
VALIDATE_DATA_STRUCTURE = 0x400,
IMPROVE_CACHE_LOCALITY = 0x800,
REMOVE_REDUNDANT_MATERIALS = 0x1000,
FIX_INFACING_NORMALS = 0x2000,
SORT_BY_PTYPE = 0x8000,
FIND_DEGENERATES = 0x10000,
FIND_INVALID_DATA = 0x20000,
GEN_UV_COORDS = 0x40000,
TRANSFORM_UV_COORDS = 0x80000,
FIND_INSTANCES = 0x100000,
OPTIMIZE_MESHES = 0x200000,
OPTIMIZE_GRAPH = 0x400000,
FLIP_UVS = 0x800000,
FLIP_WINDING_ORDER = 0x1000000,
SPLIT_BY_BONE_COUNT = 0x2000000,
DEBONE = 0x4000000,
GLOBAL_SCALE = 0x8000000,
EMBED_TEXTURES = 0x10000000,
FORCE_GEN_NORMALS = 0x20000000,
DROP_NORMALS = 0x40000000,
GEN_BOUNDING_BOXES = 0x80000000
};
inline EModelParserFlags operator~ (EModelParserFlags a) { return (EModelParserFlags)~(int)a; }
inline EModelParserFlags operator| (EModelParserFlags a, EModelParserFlags b) { return (EModelParserFlags)((int)a | (int)b); }
inline EModelParserFlags operator& (EModelParserFlags a, EModelParserFlags b) { return (EModelParserFlags)((int)a & (int)b); }
inline EModelParserFlags operator^ (EModelParserFlags a, EM