顶点是否与凸多边形重合?

时间:2010-11-07 15:10:38

标签: c++ opengl geometry convex-polygon

我是openGL的新手,我正在阅读红皮书。现在,作为练习我想手动绘制一个球体。为此,我将球体划分为切片和堆叠,因此我得到了多个矩形,但是在球体的两极附近,我得到了三角形。 (希望这很清楚我在做什么)。现在我知道如果你使用GL_POLYGON绘制一个多边形并且它恰好相交,那么行为是未定义的。我的问题是这样的:给定三个点v1,v2,v3不在一行上,这是不确定的行为:

glBegin(GL_POLYGON)
vertex v1
vertex v1
vertex v2
vertex v3
glEnd();

这可能会将两个不相关的问题合并为一个,但我也想知道:如果我选择将我的球体例程中的矩形划分为三角形,那么我是如何做的,也就是说,我划分的是哪个对角线将rect插入两个三角形?我猜测,绘制单色球体并不重要,但我不知道纹理,着色器,灯光等。

2 个答案:

答案 0 :(得分:4)

当我做openGL时,我很快就坚持使用三角形。它们的特殊之处在于三角形不会有任何歧义。

你举例说,我想这会起作用,虽然可能是人工制品。

如何分割矩形并不重要,只要你注意三角形的缠绕方式,你可以用哪种方式定义点,因为这是指示它们的正面和背面。

但绝对坚持三角形,图像这四个正方形点

(0,0,0)(1,0,0)(1,0,1)(0,0,1)

相当容易看出它是一个扁平的正方形,但如果我将它们更改为

会怎样

(0,1,0)(1,0,0)(1,1,1)(0,0,1)

你现在有什么?它可以画成山谷或像山一样。如果我用三角形定义这个形状,你就知道我在描述什么

(0,1,0)(1,0,0)(1,1,1) (1,1,1)(1,0,1)(0,1,0)

像山一样的形状

好吧......所以我在这里跟踪了一点...我的观点是,我不知道你的代码在实践中会做什么,但我不认为你应该以任何方式使用它。只要你的三角形被正确描述,你如何分割矩形就不重要了。

答案 1 :(得分:2)

这不是问题。 OpenGL总是必须能够处理光栅化几何体的可能性,其中多个顶点落在同一位置,因为根据您的模型视图和投影矩阵(或几何体和/或顶点),即使不同的输入点也可能最终成为相同的输出点着色器,如果你在可编程管道上)。它旨在以各种边缘情况处理数学上正确的方式。

OpenGL对是否用几何体绘制像素的主要测试是它的中心是否落在被绘制图元的数学范围内*。因此,OpenGL可以渲染绘制非连续像素集的多边形(通常在它们变得几乎消失的时候就会发生)或者没有绘制任何像素(当它们最终变得很小时往往会出现这种情况,但它们在技术上可能是任意大的大小,只要它们在像素中心之间挤压)。

硬件级别使用的确切测试可能因供应商而异,并且保证仅对屏幕上凸出的几何图形是正确的 - 这就是为什么大多数人都认为坚持三角形,因为它们不可避免地是凸起的。 / p>

(*)一个单独的面向屏幕的测试应用于精确地在边界上的像素,以确保它们仅归因于多边形沿公共边相遇的一个多边形