2010-11-07 50 views
1

我新的OpenGL和我读的红皮书。现在,作为一个练习,我想手动绘制一个球体。为此,我将球体分成切片和叠层,从而得到多个矩形,但在球体的两极附近,我得到了三角形。 (希望这是清楚我在做什么)。现在我知道如果你用GL_POLYGON绘制一个多边形并且恰好相交,它的行为是不确定的。我的问题是:给出三点V1,V2,V3它们无法在同一行,是不确定的行为要做到这一点:顶点可以在凸多边形中重合吗?

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

这可能是两个不相关的问题,结合成一个,但我也想知道这样的:如果我选择在我的领域常规的矩形分割成三角形,不要紧,我如何做到这一点,那就是,通过对角线我划分矩形成两个三角形?我猜测对于绘制单色球体无所谓,但我不知道纹理,着色器,照明等。

+0

你可以在极点附近至少使用三角形 – Andrey 2010-11-07 15:13:20

+0

@Andrey:是的,我知道,如果我能避免考虑特殊情况,我只是在想。 – 2010-11-07 15:14:09

回答

2

这是没有任何问题的。 OpenGL总是必须能够处理多个顶点落入相同位置的栅格化几何图形的可能性,因为即使不同的输入点可能会以相同的输出点作为相同的输出点,这取决于您的模型视图和投影矩阵(或者您的几何图形和/或顶点着色器,如果你在可编程管线上)。它被设计用于在各种各样的边缘情况下以数学方式处理正确的方式。

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

在硬件级别使用的确切测试可能会因厂商不同而有所不同,并且只有在屏幕上凸出的几何图形才能保证正确 - 这就是为什么大多数人说坚持三角形,因为它们不可避免地凸出。

(*)单独面向屏幕的测试应用到像素准确的边界上,以确保他们归因于仅只有一个地方多边形沿着公共边缘满足多边形

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)

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