c++ - 计算机图形学中的最大凸面修补

标签 c++ algorithm c++11 graphics 3d

给定计算机图形学中的 3D 对象,其表面表示为 3D 三角形网格(3D 三角形对象的网格),我需要找到给定 3D 对象表面上的最大连续凸 block 。

我正在使用 OpenGl 在 C++ 程序中渲染图形。我应该使用什么样的方法或算法来找到凸 block 。

我必须对对象上的不同凸 block 应用不同的颜色来表示选择。

假设我有一个球体,那么整个球体就是一个最大的凸 block 。球体表面的任何部分都是一个凸 block ,最大是指可以找到的最大连续凸 block 。那么在渲染中,根据视角,观察者可见的最大凸 block 必须着色。

最佳答案

从任何三角形开始。遍历它的边并检查两个三角形之间的角度是否小于 180 度。如果是,则将其添加到当前选择中并继续展开。

如果使用 vector 几何,检查实际上非常简单。假设 A - B 是公共(public)边,C 在选定的一侧,而 D 在另一侧。然后检查是否 dot(cross((A-B), (D-B)), cross((A-B), (C-B)) < 0 .

不幸的是,OpenGL 对对象算法没有帮助。它仅处理将三角形转换为像素。

关于c++ - 计算机图形学中的最大凸面修补,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36080173/

相关文章:

c++ - 编译器推导超出范围的变量的右值引用

algorithm - 短差距与平均差距

c++ - 物体图像中的实际大小

algorithm - 高效查找未排序列表前缀的顺序统计?

algorithm - 为 n 找到最近的下一个数字,以及 2 个数字的倍数之和

c++ - Bjarne Stroustrup 的 c++ 书中的这个例子有什么问题

c++11 以微秒精度获取当前时间

c++ - 在迭代器问题 C++ 中访问结构

c++ - 钻石形状打印不正确

c++ - Clang -Wweak-vtables 和纯抽象类