c++ - 顶点可以在凸多边形中重合吗?

标签 c++ opengl geometry convex-polygon

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

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

这可能会将两个不相关的问题合二为一,但我也想知道:如果我选择将我的球体例程中的矩形划分为三角形,我如何做是否重要,也就是说,我用哪条对角线划分矩形分成两个三角形?我猜想绘制一个单色球体并不重要,但我不知道纹理、着色器、照明等。

最佳答案

当我在做 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)

像山一样的形状

好吧...所以我在这里稍作跟踪...我的意思是,我不知道您的代码在实践中会做什么,但我认为您不应该以任何方式使用它。以及如何拆分矩形并不重要,只要以正确的方式描述三角形即可。

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

相关文章:

javascript - 在谷歌地图中平铺连续的多边形

c++ - 如何通过q​​t中的ODBC驱动程序连接到oracle 12c?

c++ - 运行 make 时附加编译器标志

c++ - 为什么 `&array` 和 `array` 指向同一个地址?

c - OpenGL 3.3 - glDrawArrays 之后无效操作错误 (1282)

opengl - opengl中的正交投影和纹理坐标

c++ - 如何在 Qt 中使用 GLEW?

ios - 如何让 CAShapeLayer() 圆根据大小类调整大小

algorithm - 3D多边形与立方体的交集算法

c++ - strcpy 没有在此范围内声明?