Mesh指定材质贴图坐标


我们在Mstn中对Mesh附加材质时,材质的纹理贴图是通过材质编辑器中预设置的映射方式映射到Mesh表面上的,如果系统提供的映射方式不能满足我们的使用需求的话,我们还可以通过下图所示的工具去手工调整贴图的位置:

但是这种方式也只能是整体的去调整贴图的位置,如果我们想精确的控制Mesh的每个面对应的贴图纹理坐标该如何实现呢?这里我们就需要给Mesh增加“Param”数据来指定Mesh的每个面对应的贴图纹理坐标了。Mstn SDKPolyfaceHeader类型下提供了“Param”以及“ParamIndex”两个函数来给Mesh添加这些数据,如下所示:

如下是具体实现代码:

    PolyfaceHeaderPtr polyfaceHeader = PolyfaceHeader::CreateFixedBlockIndexed(3);
	DPoint3d ptArr[4] = { {0,0,0},{10000,0,0},{10000,10000,0},{0,10000,0} };
	polyfaceHeader->Point().insert(polyfaceHeader->Point().begin(), ptArr, ptArr + 4);
	int indexFaceMesh[3] = { 1,2,3 };
	polyfaceHeader->PointIndex().insert(polyfaceHeader->PointIndex().begin(), indexFaceMesh, indexFaceMesh + 3);
	indexFaceMesh[0] = 3;
	indexFaceMesh[1] = 4;
	indexFaceMesh[2] = 1;
	polyfaceHeader->PointIndex().insert(polyfaceHeader->PointIndex().begin(), indexFaceMesh, indexFaceMesh + 3);
	DPoint2d ptParamArr[4] = { {0.3,0.3},{0.7,0.6},{0.8,0.9},{0,0} };
	polyfaceHeader->Param().insert(polyfaceHeader->Param().begin(), ptParamArr, ptParamArr + 4);
	indexFaceMesh[0] = 1;
	indexFaceMesh[1] = 2;
	indexFaceMesh[2] = 3;
	polyfaceHeader->ParamIndex().insert(polyfaceHeader->ParamIndex().begin(), indexFaceMesh, indexFaceMesh + 3);
	indexFaceMesh[0] = 1;
	indexFaceMesh[1] = 2;
	indexFaceMesh[2] = 3;
	polyfaceHeader->ParamIndex().insert(polyfaceHeader->ParamIndex().begin(), indexFaceMesh, indexFaceMesh + 3);
	EditElementHandle eehMesh;
	DraftingElementSchema::ToElement(eehMesh, *polyfaceHeader, NULL, *ACTIVEMODEL);
	eehMesh.AddToModel();

可以看到新创建出的Mesh元素多了如下所示的数据:

此时我们对创建出的Mesh去附加材质时,纹理贴图就按照我们这里设置的纹理坐标去映射到Mesh元素的表面了。