【问题标题】:Why is there no circle or ellipse primitive in OpenGL?为什么OpenGL中没有圆形或椭圆基元?
【发布时间】:2010-05-30 14:45:04
【问题描述】:

圆是基本的几何实体之一。然而,OpenGL 中没有为此定义原语,例如线条或多边形。为什么这样?一直为此包含自定义标题有点烦人!

有什么具体原因可以省略吗?

【问题讨论】:

  • 说这取决于分辨率
  • 这样我们可以在技术面试中要求人们写一个圆圈函数。

标签: opengl


【解决方案1】:

虽然圆形可能是基本形状,但在光栅化方面,它们不像点、线或三角形那样基本。第一款具有 3D 加速功能的显卡被设计成可以很好地完成一件事,即光栅化三角形(以及线条和点,因为它们添加起来很简单)。添加任何更复杂的形状会使卡片变得更加昂贵,而只添加很少的功能。

但不包括圆形/椭圆还有另一个原因。他们不连接。您无法使用它们构建 3D 模型,也无法在不添加间隙或重叠部分的情况下将三角形连接到它们。因此,要使圆形有用,您还需要其他形状,如曲线和其他更高级的曲面(例如 NURBS)。单独的圆只能用作“大点”,也可以使用四边形和圆形纹理或三角形来完成。

如果您对圆圈使用“自定义标题”,您应该知道那些可能会创建一个三角形模型来形成您的“圆圈”。

【讨论】:

  • 你能解释一下“自定义标题”是什么意思吗?
  • 来自问题。我不知道 Ram 到底是什么意思,但我猜它是一个带有一些 OpenGL 实用函数的库。
【解决方案2】:

因为从历史上看,显卡都会渲染点、线和三角形。

您使用足够短的线来计算曲线,这样显卡就不必这样做了。

【讨论】:

    【解决方案3】:

    因为图形卡在 3 维点、线和三角形上运行。圆需要曲线或样条曲线。它不能用“正常”的 3D 图元完美表示,只能近似为 N 边形(因此在一定距离处它看起来像一个圆)。如果您想要一个圆圈,请自己编写例程(这并不难)。要么将其绘制为 N 边形,要么制作一个正方形(2 个三角形)并使用片段着色器从中切出一个圆形(您可以通过这种方式获得一个完美的圆形)。

    【讨论】:

    • +1。顺便说一句,片段着色器仍然只能通过屏幕上的像素来近似圆。不是一个完美的圈子。 =P
    • @Xavier Ho:不过,使用片段着色器,您几乎可以在距圆的任何距离处获得完美的近似值(在非常近的距离处可能会出现精度误差)。在计算中加入一点抗锯齿,就没有什么可抱怨的了。
    • “完美近似” - 我称之为矛盾修饰法!是的,你是对的。
    • @Xavier Ho:“我称之为矛盾修饰法!” :)(以防万一)我的意思是说它仍然由方形像素制成,但不会像传统的 N 边形圆近似那样出现“直”(非弯曲)线段或浪费的顶点。
    【解决方案4】:

    您始终可以使用gluSphere(如果您正在寻找一个三维形状)。

    如果您想绘制一个二维圆,您会遇到自定义方法。我会选择三角扇。

    原语被称为原语是有原因的 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 2020-07-05
      相关资源
      最近更新 更多