Plugins 在3ds max插件中从硬边创建平滑组

Plugins 在3ds max插件中从硬边创建平滑组,plugins,3dsmax,3ds,Plugins,3dsmax,3ds,我需要为3ds Max实现一个导入器,该导入器将加载一些自定义网格数据。 我已经实现了大部分加载代码,但是我仍然有一个问题需要解决 我需要使用的数据格式使用称为“硬边”的结构来描述曲面平滑度,但3ds Max使用“平滑组”,虽然这两种方法都非常有效,但我需要某种方法将其转换为第二种 基本上,我已经将一些网格顶点/面加载到3ds中,现在我需要根据文件中的硬边列表计算这些面的平滑组 你能给我指一些算法或线索来帮助我实现转换吗 我尝试搜索google等,有很多关于平滑组的教程和文章,但是从3ds Ma

我需要为3ds Max实现一个导入器,该导入器将加载一些自定义网格数据。 我已经实现了大部分加载代码,但是我仍然有一个问题需要解决

我需要使用的数据格式使用称为“硬边”的结构来描述曲面平滑度,但3ds Max使用“平滑组”,虽然这两种方法都非常有效,但我需要某种方法将其转换为第二种

基本上,我已经将一些网格顶点/面加载到3ds中,现在我需要根据文件中的硬边列表计算这些面的平滑组

你能给我指一些算法或线索来帮助我实现转换吗


我尝试搜索google等,有很多关于平滑组的教程和文章,但是从3ds Max用户(建模)的角度来看。我找不到任何关于对代码执行相同操作的方法(我也没有为此询问API,我知道API,但我需要一个算法来计算SGs)。

好的,我找到了一些解决方法

它使用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
MNMesh mm=*pMesh;//pMesh已包含顶点/面数据,并已复制到MNMesh
mm.FillInMesh();//在MNMesh中计算辅助对象数据
for(int i=0;iv1;
int v2=mm.E(i)->v2;
bool found=findHardEdge(v1,v2);//检查边是否为“硬边”
如果(找到)
mm.E(i)->SetFlag(32);//用一些标志标记边
}
mm.平滑折痕(32);//这种方法很管用
mm.OutToTri(*pMesh);//将数据复制回原始网格实例
我意识到这段代码相当慢,特别是对于更大的网格,但这也是我想到的最简单的东西。如果你知道更好的方法,请告诉我:)