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

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

这可能是将两个不相关的问题合并为一个,但是我也很想知道:如果我选择将球体例程中的矩形划分为三角形,我的操作方式是否重要,也就是说,将矩形划分为哪个对角线两个三角形?我猜想对于绘制单色球并不重要,但是我不了解纹理,着色器,照明等。

最佳答案

没关系。 OpenGL必须始终能够处理将多个顶点放置在同一位置的几何形状栅格化的可能性,因为根据模型 View 和投影矩阵(或几何形状和/或顶点),即使不同的输入点也可能最终成为相同的输出点着色器(如果您在可编程管线上)。它旨在以数学上正确的方式处理各种边缘情况。

OpenGL是否要用几何图形绘制像素的主要测试是其中心是否落在要绘制的图元的数学范围内*。因此,OpenGL可以渲染多边形,以绘制非连续像素集(通常在它们几乎消失时会发生)或不绘制任何像素(趋向于当它们最终变得非常小时出现,但是从技术上讲它们可能任意大)大小,只要它们在像素中心之间挤压即可。

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

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

关于c++ - 顶点可以在凸多边形中重合吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4118301/

10-11 16:53
查看更多