【问题标题】:OpenGL - Draw non planar 3D polygon consisted of a set of pointsOpenGL - 绘制由一组点组成的非平面 3D 多边形
【发布时间】:2019-03-14 01:28:37
【问题描述】:

我有一组形成形状的点(特别是半个管道,其他类似的形状)。我需要一种方法来绘制这个圆柱面。

例如:

我想画这个半管子,我把标记的点排序(画成红色圆圈)。

具有圆柱体的近似值(具有线性边缘,而不是完全圆形)很好。

我的形状并不总是半管或圆柱形,而是总是封闭的多边形,我有一组点形成它。

(我用的是PyOpenGL,不过没关系)

【问题讨论】:

  • 您在哪里遇到问题?这可以用 N 个三角形绘制(在给定的示例中,它似乎有 14 个)。我想从你的观点推断三角形可能很有趣,但你应该先自己尝试一下,然后向我们展示你的结果。另一个问题是如何绘制三角形,我认为您可以找到答案。 “我的形状并不总是半管......”部分看起来很适合形成三角形,但需要更多数据。比如点是如何排序的,以便您知道哪些点连接曲面。
  • 我想不出一种简单通用的方法来直接把它做成三角形
  • 嗯,关于订购的额外提示并非没有。形状不明确,只有点。
  • 我的意思是,如果提示是“它是半管”,在大多数情况下,我们可以从您的示例中的点找到中心线和半径。也是一个起点和终点,可以让我们绘制一个完美的半管。但是,如果这种形状可以是任何东西,我们可能会遇到问题。其中一些形状可能是独一无二的,例如有管道和球体,但其他形状可能没有那么多。
  • [不想编辑答案,这只是附加信息],YouTube 上有 ThinMatrix 提供的相当不错的 openGL 教程,它使用 Java 并使用 LWJGL,但 OpenGL 的核心基础是一样,所以如果你仍然不知道你在做什么,你可以跟着它。请注意,他并没有以最好的方式做到这一点,你应该只是模糊地遵循它。例如,当他将在下一帧绑定缓冲区时,他在绘制后不必要地取消绑定缓冲区,这意味着即使他不取消绑定它们也不会发生任何异常情况。如果你想效仿一个真实的例子。

标签: opengl polygon pyopengl tessellation


【解决方案1】:

您应该学习如何在 3D 中渲染模型,然后,您将能够制作任何您想要的东西。

每个模型由三角形组成,一个三角形是空间中的3个任意顶点。

您可能想要下载并启动一个建模程序(例如搅拌机),并在尝试之前先尝试构建您想要构建的东西,因为您要么必须手动构建它,要么编写执行此操作的算法.

然后转到线框视图或点视图,您将看到您实际构建的内容。只是不要忘记先正确进行三角测量(如果您出于某种原因使用四边形,搅拌机可以自动进行)。

最重要的是,您想使用现代 openGL,这意味着您必须学习管道...

好吧,没有办法避免这种情况,你必须阅读和学习:https://learnopengl.com/

但我可以为你总结一下:

  1. 获取模型数据 - 在这种情况下,如果您希望它看起来像您向我们展示的那样,顶点和三角形就足够了;
  2. 加载顶点数据并将其绑定到 VAO,并将您的三角形(索引,在 VAO 数据中指定顶点排序的数字)绑定到 EBO。 Meanings are here
  3. 现在,您可以构建矩阵,例如投影矩阵,该矩阵将用于正确变换顶点,使其看起来像一个适当的 3D 对象,并可以随意旋转等等;
  4. 您使用 glDrawElements() 渲染 EBO 数据;

是的,这不应该说得很清楚,但是随着本教程的进行,您将学习如何做到这一点。

至于如何获取实际半管的数据...你需要取圆公式,选择一个你想要的弧,比如说,PI * 2 / 3,或者换句话说,圆的三分之一,把这个弧分成@ 987654324@ 部分,然后在每个段中,创建一个从圆面向外的平面,该平面每个是 2 个三角形(使 2 个三角形在视觉上形成一个矩形),最后,你会得到你想要的结果。

要真正弄清楚如何做到这一点,您需要学习如何手动构建网格,然后拿一张纸进行数学计算。此外,您可以手动构建整个东西,它只是数字,代表空间中的点,由线连接,包围平面。每个平面都是一个三角形。

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 2016-02-10
    • 2018-09-29
    相关资源
    最近更新 更多