首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在对偶轮廓中获得正确的三角形面

如何在对偶轮廓中获得正确的三角形面
EN

Stack Overflow用户
提问于 2016-12-30 00:40:56
回答 1查看 850关注 0票数 4

作为程序网格生成器的一部分,工作在双重轮廓上,将有符号距离函数转换为网格。

希望一些对算法有经验的人能帮到这一点,接近尾声。

我们有

  1. 体素网格边缘切点和法线,其中函数曲面与边缘交叉。 我们访问网格的每个角落,沿着x,y,z轴投射边缘 b.在函数中显示符号变化的每一个边都被认为是活动的。
  2. 每个体素内的顶点点,计算为由体素边缘上的切点和法线定义的平面最接近的交点。 通过访问每个活动边缘,我们找到每个体素来生成一个顶点。 逆时针方向绕着边缘,相对于边缘所在的轴。
  3. 网格的生成通过缠绕在每个活动的边缘,将4个相邻体素内部的顶点连接成一个四角体素。

当每一张脸产生时,我必须确定该面朝哪个方向,以便使组成该四面的三角形的卷绕顺序是正确的。

首先,我们得到了每个体素顶点的平均正态:

代码语言:javascript
复制
            float3 faceNormal = new float3(0f,0f,0f);
            float nCount = 0f;
            for (int eachVoxel = 0; eachVoxel < 4; eachVoxel++)
            {
                vid = edgeVoxels[eachVoxel];
                var theVoxel = _voxelsById[vid];

                faceNormal += theVoxel.VertexNormal.xyz;
                nCount += 1f;


            }

            faceNormal /= nCount;
            faceNormal /= faceNormal.Length();

然后我们决定是否需要扭转顺序:

代码语言:javascript
复制
            float faceAngle = float3.Dot(_axis[edge.EdgeDir], faceNormal);
            if (faceAngle > 0.0f)
            {
                distinctMeshVoxels = distinctMeshVoxels.Reverse();
            }

这几乎成功了。以这个光线行进的物体场景为例:

现在是导入到网格实验室的网格。注意那个黑色三角形--它正朝着错误的方向。锋利的边缘有时似乎是个问题。我尝试过其他各种方法: 1.平均边缘切点法线,2.找到离三角形质心最近的切点,然后使用它是正常的,

没有什么比下面的图片更好了。

感谢关于如何完善这部分算法的任何建议或想法。

EN

回答 1

Stack Overflow用户

发布于 2022-10-11 15:57:12

在双轮廓法中,首先检测边缘的符号变化,这些边被重建的三维曲面交叉。每条这样的边缘在表面上产生一个四角体。构成该四角体的三角形是定向的,使得边的顶点与正定值位于相对于三角形的正半空间中。

下面是双轮廓的一个简单教程,以了解更多细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41389138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档