OpenGL 3+渲染凹面多边形(不含GLU)

时间:2015-09-23 14:29:39

标签: c linux opengl

我想在Linux系统上使用C,OpenGL渲染凹多边形。任何人都可以提供示例代码,如何在最新版本的OpenGL中完成此操作(假设OpenGL 4.5,根据glxinfo NVIDIA驱动程序352.41支持,但是你喜欢的3+版本支持在Linux上的硬件中实现的扩展)至少是NVIDIA)。

stackoverflow上的question指向使用不推荐使用的GLU tesselation。使用我不完全理解的模板缓冲方法,但如果这是行业认可的标准"现在这样做,我会更加努力地理解。

这个post指的是我不想在Linux和C上使用的.NET库,tesselation着色器,我会喜欢一个如何使用的示例,但我能找到的所有示例都以凸面开头补丁,已弃用的库为后代移动到另一个我想要离开的存储库。

感谢。

1 个答案:

答案 0 :(得分:1)

绝大多数OpenGL应用程序根本不会绘制凹多边形;它不是API或硬件直接尝试支持的东西,因此没有行业标准方法。模板将在帧缓冲区中实现它,任何类型的凸分解都将在几何级别实现它。

模板方法实际上并不难理解。比喻是栅栏跳跃:多边形的边缘是栅栏,多边形本身是封闭的土地。要确定一个点是否在陆地内,从外面的任何地方开始并以直线行走。算一下你跳过栅栏到达那里的次数。每当你跳过围栏时,你都会从内到外切换,反之亦然。因此,如果你跳过偶数个围栏,那么这个点必须在里面(例如你从外到内一次,或者>在里面 - >在外面 - >在里面,或者 - >在里面 - >在外面 - &gt ;内部 - >外部 - >内部等)。如果你跳了奇数个围栏那么它必须在外面。

模板方法保持围栏跳跃的每像素数。

它相对于作为多边形顶点的固定点绘制三角形扇形。所以它是每个栅栏一个三角形,第三个坐标是你知道在里面的固定位置。

三角形内的像素是每个点,为了让你在直线上到达固定点,需要你跳过那个栅栏。

因此,任何位置的模板总数都是从那里跳到多边形所需的栅栏数。

因此所有奇怪的模板结果都是内部的点。所有甚至结果都是外面的点。