给定计算机图形学中的 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/