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);
}

浙公网安备 33010602011771号