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:绘制多边形时,如果第一个顶点在屏幕空间之外怎么办(三角扇)的主要内容,如果未能解决你的问题,请参考以下文章