3dsmax导入插件的PolyObject创建方法

void CreateMesh(Interface16* gi,  int vertCount)

{

PolyObject* polyObj = nullptr;

// 创建多边形

polyObj = CreateEditablePolyObject();

// 在3dsmax场景中创建节点,ModelObjectName是模型的名字

INode* pNode = gi->CreateObjectNode((Object*)polyObj, ModelObjectName);

// 载入场景中
gi->GetRootNode()->AttachChild(pNode);

// 获取网格对象Mesh

MNMesh& mesh = ((PolyObject*)pNode->GetObjectRef())->GetMesh();

// 设置顶点个数
mesh.setNumVerts(vertCount);

mesh.setNumFaces(triangles.size());

// 设置边数
mesh.setNumEdges(triangles.size() * 3);

 

 

// 设置纹理数据

mesh.SetMapNum(2);

mesh.InitMap(1); 

MNMap* mnMap2 = mesh.M(1);

// 纹理的顶点个数

mnMap2->setNumVerts(vertCount);

// 纹理的面数

mnMap2->setNumFaces(triangles.size());

for (DWORD i = 0; i < vertCount; i++)

{

// 顶点坐标
MNVert* v_point = mesh.V(i);
v_point->p.x = verts[i].x;
v_point->p.y = verts[i].y;
v_point->p.z = verts[i].z;

// 色彩纹理坐标

UVVert& uv = mnMap2->V(i);
uv.x = coords[0][i].u;
uv.y = 1.0f - coords[0][i].v;
uv.z = 0.0f;

mnMap2->v[i].x = coords[0][i].u;
mnMap2->v[i].y = 1.0f - coords[0][i].v;
mnMap2->v[i].z = 0.0f;

}

 

// 设置模型的三角形属性
for (int i = 0; i < triangles.size(); i++)
{
Triangle& tri = triangles[i];
int a = baseIndex + tri.v[0];
int b = baseIndex + tri.v[1];
int c = baseIndex + tri.v[2];

MNFace* f = mesh.F(i);
f->SetDeg(3);
f->vtx[0] = a;
f->vtx[1] = b;
f->vtx[2] = c;

f->edg[0] = a;
f->edg[1] = b;
f->edg[2] = c;

f->smGroup = 1;

BitArray& visedg = f->visedg;
visedg.Set(0);
visedg.Set(1);
visedg.Set(2);

 

// 设置纹理面

MNMapFace* uvface = mnMap2->F(i);
uvface->SetSize(3);
uvface->tv[0] = a;
uvface->tv[1] = b;
uvface->tv[2] = c;
uvface->MakePoly(3, f->vtx);

}
mesh.FillInMesh();

pNode->EvalWorldState(0);

}

posted @ 2025-02-18 05:07  Woool  阅读(37)  评论(0)    收藏  举报