CryEngine5.5用代码读出模型的各个数据(顶点、UV、法线等)


void ModelInfo()
{
	const char* fileName = "G:\\CryEngine\\CryEngine3.4.6\\Editor\\Objects\\box.cgf";
	IStatObj* pObj = gEnv->p3DEngine->LoadStatObj(fileName);
	
	//Debug模式下pRM可能会获取为空值
	IRenderMesh* pRM = pObj->GetRenderMesh();

	if (pRM)
	{
		IIndexedMesh* pIM = pRM->GetIndexedMesh();
		CMesh* pMesh = pIM->GetMesh();

		/*读出模型信息*/

		std::vector<Vec3> Vertices;
		std::vector<vtx_idx> Indeices;
		std::vector<SMeshTexCoord> TexCoords;
		std::vector<SMeshTangents> Tangents;
		std::vector<SMeshNormal> Normals;
		std::vector<SMeshColor> Color0s;
		std::vector<SMeshColor> Color1s;
		if (pMesh->GetVertexCount())
		{
			//顶点
			Vec3* pVertices0 = pMesh->GetStreamPtr<Vec3>(CMesh::POSITIONS);
			int count = pMesh->GetVertexCount();
			for (int i = 0; i < count; ++i)
				Vertices.push_back(pVertices0[i]);

			//索引
			vtx_idx* pIndices0 = pMesh->GetStreamPtr<vtx_idx>(CMesh::INDICES);
			int counti = pMesh->GetIndexCount();
			for (int i = 0; i < counti; ++i)
				Indeices.push_back(pIndices0[i]);

			//纹理坐标
			SMeshTexCoord* pTexCoords0 = pMesh->GetStreamPtr<SMeshTexCoord>(CMesh::TEXCOORDS);
			for (int i = 0; i < count; ++i)
				TexCoords.push_back(pTexCoords0[i]);

			//切线坐标
			SMeshTangents* pTangents = pMesh->GetStreamPtr<SMeshTangents>(CMesh::TANGENTS);
			for (int i = 0; i < count; ++i)
				Tangents.push_back(pTangents[i]);

			//法线坐标
			SMeshNormal* pNormal = pMesh->GetStreamPtr<SMeshNormal>(CMesh::NORMALS);
			for (int i = 0; i < count; ++i)
				Normals.push_back(pNormal[i]);

			//颜色1
			SMeshColor* pColor0 = pMesh->GetStreamPtr<SMeshColor>(CMesh::COLORS_0);
			if (pColor0)
			{
				for (int i = 0; i < count; ++i)
					Color0s.push_back(pColor0[i]);
			}

			//颜色2
			SMeshColor* pColor1 = pMesh->GetStreamPtr<SMeshColor>(CMesh::COLORS_1);
			if (pColor1)
			{
				for (int i = 0; i < count; ++i)
					Color0s.push_back(pColor1[i]);
			}
		}
	}

}

获取的都是数据的首地址,所以只再知道数据的size就能一个个提取出来了,size一般直接从mesh对象就可以Get到

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值