OpenGL:绘制多边形时,如果第一个顶点在屏幕空间之外怎么办(三角扇)

Posted

技术标签:

【中文标题】OpenGL:绘制多边形时,如果第一个顶点在屏幕空间之外怎么办(三角扇)【英文标题】:OpenGL: While drawing a polygon, what if the first vertex is outside of the screen space (Triangle fans) 【发布时间】:2017-09-02 10:59:00 【问题描述】:

我正在关注 Sumanta Guha 第二版的Computer Graphics Through OpenGL, 2nd Edition,在第 35 页中,它说

将(原始)square.cpp 的第一个顶点从glVertex3f(20.0, 20.0, 0.0) 提升到glVertex3f(20.0, 20.0, 1.5) 会导致正方形——实际上,不再是正方形的新图形——被剪裁。相反,如果第二个顶点从glVertex3f(80.0, 20.0, 0.0) 升高到glVertex3f(80.0, 20.0, 1.5),那么图形也会被剪裁,但与第一个顶点升高时的情况截然不同。为什么?结果不应该是对称的吗?

提示:OpenGL 在对多边形进行三角剖分后将其绘制为所谓的三角形扇形,多边形的第一个顶点是扇形的中心。例如,图 2.16 中的扇形由三个围绕顶点 v0 的三角形组成。

对应代码的样子

  glVertex3f(20.0, 20.0, 0.0);
  glVertex3f(80.0, 20.0, 0.0);
  glVertex3f(80.0, 80.0, 0.0);
  glVertex3f(20.0, 80.0, 0.0);

如果我只将第一个顶点的 z 轴设置为 1.5f,我会得到这样的输出,

如果我只将第二个顶点的 z 轴设置为 1.5f,我会得到以下输出

在后一种情况下,我可以理解为什么由于剪辑而得到该输出,但我不明白为什么在前一种情况下得到该输出。

【问题讨论】:

【参考方案1】:

您正在绘制两个三角形:A,B,C 和 A,C,D。

如果更改其中一个顶点的z,则两个三角形将不再位于同一平面内。

在第一种情况下,您更改了影响两个三角形的 A。在第二种情况下,您正在更改 B,这只会影响第二个三角形。

请注意,您使用的代码已经过时了,并且将无法在现代的 OpenGL 核心配置文件中运行,其中“现代”意味着:十年 .

【讨论】:

我知道,作者只在第一章使用这个。

以上是关于OpenGL:绘制多边形时,如果第一个顶点在屏幕空间之外怎么办(三角扇)的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL VBO 绘制顺序

如何在 OpenGL 3.2 中绘制全屏四边形?

VBO:未绘制数组

具有独特着色器的 OpenGL 多次绘制调用会产生空白屏幕

OpenGL入门程序

OpenGL GL_POLYGON 无法正常运行