请帮我理解Catmull-Clark细分算法

问题描述 投票:0回答:0

我想了解计算机图形学课程的 Catmull-Clark 细分算法。

我知道 SO 关于家庭作业问题的政策。该课程是一门独立的研究,教授与他的主要课程捆绑在一起,因此他可能需要一段时间才能做出回应。我还发现很难在网上找到一个具体的例子,我可以在其中插入值并查看输出,所以我也没有什么可以比较我的计算。此外,细分只是作业的一小部分。因此,我觉得在这里寻求帮助是合适的。

以下是我利用的一些资源:

【问题1】 我明白了如何计算人脸点:简单地计算每张脸的质心。我的麻烦从第二步开始(维基百科):

将每个边缘点设置为两个相邻面点的平均值()和边缘的中点(.

我会扩展公式:

【问题2】 这道题更多的是关于算法在实践中的实现。我们创建了所有这些新点,但是我们怎么知道要连接哪些点以形成新面孔呢?

我可以跟踪哪些人脸用于计算人脸点,哪些边缘和人脸点用于计算边缘点等。这是一个小片段(用 TypeScript 编写):

// Blue spheres in Wikipedia images.
interface FacePoint {
  point: Vector<3>;
  face: Face<3>;
}
// Pink cubes in Wikipedia images.
interface EdgePoint {
  point: Vector<3>;
  edge: Edge<3>;
  faces: [Face<3>, Face<3>];
}
// Green cones in Wikipedia images.
interface Barycenter {
  point: Vector<3>;
  face: Face<3>[];
  edges: Edge<3>[];
  originalPoint: Vector<3>;
}

有了这些信息,我可以在面点到边缘点之间以及边缘点和重心之间创建新的边缘。

要找到新面孔,我可以使用最短路径算法。这似乎效率低下,我怀疑这种方法是否在实践中使用。还有更好的吗?

感谢您的宝贵时间!

algorithm 3d
© www.soinside.com 2019 - 2024. All rights reserved.