我需要为3ds Max实现一个导入器,它将加载一些自定义网格数据。 我已经实现了大部分加载代码,但我还有一个问题需要解决。
我需要使用的数据格式使用称为“硬边”的结构来描述表面平滑度,但3ds Max使用“平滑组”,虽然两种方法都很好用,但我需要一些方法将一个转换为第二个。 / p>
基本上我将一些网格顶点/面加载到3ds中,现在我需要根据文件中的硬边列表计算这些面的平滑组。
您能指出我的任何算法或任何可以帮助我实现转换的线索吗?
我试图搜索谷歌等,有很多关于平滑组的教程和文章,但是从3ds Max用户(建模)的角度来看。我找不到任何与代码相同的内容(我没有问过API,我知道API,但我需要一个算法来计算SG)。
答案 0 :(得分:1)
好的,我找到了一些解决方法......
它使用3D MAX内部代码而不是我自己的代码,但至少它可以工作:
假设我有一个边缘结构的列表或向量:
struct Edge
{
int nEd0;
int nEd1;
};
检查边缘是否在列表中的函数:
bool findHardEdge( int v1, int v2 );
以下是使用MNMesh类从硬边缘计算平滑组的代码:
MNMesh mm = *pMesh; // pMesh contains vert/face data already and is copied to MNMesh
mm.FillInMesh(); // computes helper data in MNMesh
for( int i = 0; i < mm.nume; i++ ) // iterate over all edges
{
int v1 = mm.E(i)->v1;
int v2 = mm.E(i)->v2;
bool found = findHardEdge( v1, v2 ); // check if the edge is a 'hard' one
if( found )
mm.E(i)->SetFlag( 32 ); // mark an edge with some flag
}
mm.SmoothByCreases( 32 ); // this method does the job
mm.OutToTri( *pMesh ); // copy data back to the original mesh instance
我意识到这段代码非常慢,特别是对于更大的网格,但这也是我提出的最简单的方法。如果你知道更好的方式让我知道:)