为啥OpenGL中没有圆形或椭圆基元?
Posted
技术标签:
【中文标题】为啥OpenGL中没有圆形或椭圆基元?【英文标题】:Why is there no circle or ellipse primitive in OpenGL?为什么OpenGL中没有圆形或椭圆基元? 【发布时间】:2010-05-30 14:45:04 【问题描述】:圆是基本的几何实体之一。然而,OpenGL 中没有为此定义原语,例如线条或多边形。为什么这样?一直为此包含自定义标题有点烦人!
有什么具体原因可以省略吗?
【问题讨论】:
说这取决于分辨率 这样我们可以在技术面试中要求人们写一个圆圈函数。 【参考方案1】:虽然圆形可能是基本形状,但在光栅化方面,它们不像点、线或三角形那样基本。第一款具有 3D 加速功能的显卡被设计成可以很好地完成一件事,即光栅化三角形(以及线条和点,因为它们添加起来很简单)。添加任何更复杂的形状会使卡片变得更加昂贵,而只添加很少的功能。
但不包括圆形/椭圆还有另一个原因。他们不连接。您无法使用它们构建 3D 模型,也无法在不添加间隙或重叠部分的情况下将三角形连接到它们。因此,要使圆形有用,您还需要其他形状,如曲线和其他更高级的曲面(例如 NURBS)。单独的圆只能用作“大点”,也可以使用四边形和圆形纹理或三角形来完成。
如果您对圆圈使用“自定义标题”,您应该知道那些可能会创建一个三角形模型来形成您的“圆圈”。
【讨论】:
你能解释一下“自定义标题”是什么意思吗? 来自问题。我不知道 Ram 到底是什么意思,但我猜它是一个带有一些 OpenGL 实用函数的库。【参考方案2】:因为从历史上看,显卡都会渲染点、线和三角形。
您使用足够短的线来计算曲线,这样显卡就不必这样做了。
【讨论】:
【参考方案3】:因为图形卡在 3 维点、线和三角形上运行。圆需要曲线或样条曲线。它不能用“正常”的 3D 图元完美表示,只能近似为 N 边形(因此在一定距离处它看起来像一个圆)。如果您想要一个圆圈,请自己编写例程(这并不难)。要么将其绘制为 N 边形,要么制作一个正方形(2 个三角形)并使用片段着色器从中切出一个圆形(您可以通过这种方式获得一个完美的圆形)。
【讨论】:
+1。顺便说一句,片段着色器仍然只能通过屏幕上的像素来近似圆。不是一个完美的圈子。 =P @Xavier Ho:不过,使用片段着色器,您几乎可以在距圆的任何距离处获得完美的近似值(在非常近的距离处可能会出现精度误差)。在计算中加入一点抗锯齿,就没有什么可抱怨的了。 “完美近似” - 我称之为矛盾修饰法!是的,你是对的。 @Xavier Ho:“我称之为矛盾修饰法!” :)(以防万一)我的意思是说它仍然由方形像素制成,但不会像传统的 N 边形圆近似那样出现“直”(非弯曲)线段或浪费的顶点。 【参考方案4】:您始终可以使用gluSphere
(如果您正在寻找一个三维形状)。
如果您想绘制一个二维圆,您会遇到自定义方法。我会选择三角扇。
原语被称为原语是有原因的 :)
【讨论】:
以上是关于为啥OpenGL中没有圆形或椭圆基元?的主要内容,如果未能解决你的问题,请参考以下文章