使用vcglib库读取obj文件并显示(一或多个材质)

《vcglib库的入坑体验(读取obj文件并显示)》一文不能显示obj的材质,这里提供一个:

#include <......>

using namespace std;
using namespace vcg;

class PEdge;
class PFace;
class PVertex;
struct PUsedTypes : public UsedTypes<Use<PVertex>   ::AsVertexType,
    Use<PEdge>     ::AsEdgeType,
    Use<PFace>     ::AsFaceType> {};

class PVertex : public Vertex<PUsedTypes, vertex::Coord3f, vertex::Normal3f, vertex::Qualityf, vertex::Color4b, vertex::BitFlags  > {};
class PEdge : public Edge< PUsedTypes, edge::VertexRef, edge::BitFlags> {};
class PFace :public vcg::Face<
    PUsedTypes,
    face::PolyInfo, // this is necessary  if you use component in vcg/simplex/face/component_polygon.h
    face::PFVAdj,   // Pointer to the vertices (just like FVAdj )
    face::Color4b,
    face::BitFlags, // bit flags
    face::Normal3f, // normal
    face::WedgeTexCoord2f
> {};

class PMesh : public tri::TriMesh< vector<PVertex>, vector<PEdge>, vector<PFace>   > {};

//入参:Obj名称
//返回:顶点坐标,顶点法线,顶点纹理坐标(按3个点成1个三角面,也即 glDrawArrays 样式排列)
//     顶点数量,材质图像文件名
void ImporterOBJ(char *ObjName, float*&vertex, float*&normal, float*&TexCoord, int &VertexNum, std::string & textureName)
{
    clock_t t1 = clock();



    PMesh m;  //定义一个网格对象
    int mask;     //定义mask
                  //注意your filePath不能有中文路径
                  //vcg::tri::io::ImporterOBJ<GLMesh>::Open(m, filename, mask);
                  // 读取或写入 OBJ 文件的代码,参数 mask 为可选,mask 是返回参数:读入了哪些属性
    int result = vcg::tri::io::ImporterOBJ<PMesh>::Open(m, ObjName, mask);

    if (result != vcg::tri::io::ImporterOBJ<PMesh>::E_NOERROR) {
        std::cout << "Load OBJ file ERROR: " << vcg::tri::io::ImporterOBJ<PMesh>::ErrorMsg(result) << std::endl;
    }
    ///*  3 */ "Texture file not found",//从当前目录去读取 MTL 时发生,实际上还是会到OBJ文件目录去读取 MTL 的

    //为每个点计算法线并归一化
    vcg::tri::RequirePerVertexNormal(m);
    vcg::tri::UpdateNormal<PMesh>::PerVertexNormalized(m);


    printf("网格有: %i 个顶点和 %i 个面\n",
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值