【Overload游戏引擎】源码分析之八:OvRendering函数库(六)

本文分析Overload游戏引擎中ModelLoader和ShaderLoader的实现,包括ModelLoader的创建、重载和销毁模型,以及ShaderLoader的创建程序、编译着色器和解析着色器的详细过程。内容涉及AssimpParser、OpenGL函数和资源管理。
摘要由CSDN通过智能技术生成

2021SC@SDUSC

目录

Loaders

1.ModelLoader

1.1Create

1.2Reload

1.3Destroy 

2.ShaderLoader

2.1CreateProgram

2.2CompileShader

2.3ParseShader


上一节我们分析了Parser的相关代码,这一节就来看与资源导入相关的另一类工具——Loader。

Loaders

1.ModelLoader

首先是ModelLoader,它的作用是处理模型的创建和销毁,我们来看具体的代码

class ModelLoader
	{
	public:
		ModelLoader() = delete;
		/**
		* Create a model
		* @param p_filepath
		* @param p_parserFlags
		*/
		static Model* Create(const std::string& p_filepath, Parsers::EModelParserFlags p_parserFlags = Parsers::EModelParserFlags::NONE);
		/**
		* Reload a model from file
		* @param p_model
		* @param p_filePath
		* @param p_parserFlags
		*/
		static void Reload(Model& p_model, const std::string& p_filePath, Parsers::EModelParserFlags p_parserFlags = Parsers::EModelParserFlags::NONE);
		/**
		* Disabled constructor
		* @param p_modelInstance
		*/
		static bool Destroy(Model*& p_modelInstance);
	private:
		static Parsers::AssimpParser __ASSIMP;
	};

可以看到这个类中除了不可用的构造函数外,还包含了一个创建函数、一个重载函数以及一个销毁函数,同时引入了一个AssimpParser对象。

1.1Create

在create函数中,我们会用到model类的内容,相关的内容会在下一节讲解。

从该函数中我们看到它只需要2个参数,一个是模型文件的路径,一个是我们上一节讲过的EModelParserFlags枚举值。最开始我们创建一个Model对象的指针,并用传入文件路径参数做初始化,这个指针将会方便我们指向对应模型参数。

OvRendering::Resources::Model* OvRendering::Resources::Loaders::ModelLoader::Create(const std::string& p_filepath, Parsers::EModelParserFlags p_parserFlags)
{
	Model* result = new Model(p_filepath);

	if (__ASSIMP.LoadModel(p_filepath, result->m_meshes, result->m_materialNames, p_parserFlags))
	{
		result->ComputeBoundingSphere();
		return result;
	}

	delete result;

	return nullptr;
}

接下来使用AssimpParser对象的LoaderModel函数加载模型信息,这里会用到model对象的参数,如果模型加载成功将会返回true,就证明当前的model对象是可用的,我们就可以用它计算当前模型的碰撞盒信息,然后将其指针返回;如果模型加载失败,就意味没有模型导入,将会返回空指针。

1.2Reload

reload函数用于重载一个模型信息,说实话这一步的作用有点迷,我们需要从外界传入一个model对象的引用,然后利用create函数创建一个newModel,并将newModel的网格信息(m_meshes)、材质信息(m_materialNames)与碰撞球信息&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值