OpenGL - 绘制由一组点组成的非平面 3D 多边形

OpenGL - Draw non planar 3D polygon consisted of a set of points

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

例如:

我要画这个半管,标记点已经排序(画成红圈)

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

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

(我正在使用 PyOpenGL,但这并不重要)

你应该了解模型是如何在 3D 中渲染的,在那之后,你将能够制作任何你想要的东西。

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

您可能想要下载并启动一个建模程序,例如 blender,并在尝试之前尝试构建您想要构建的东西,因为您要么必须手动构建它,要么编写一个算法这样做。

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

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

嗯,这个是没法避免的,你一定要看书学习:https://learnopengl.com/

不过我可以给你总结一下:

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

是的,这不应该很清楚,但是您将在学习本教程的过程中学习如何做。

至于如何获取实际半管的数据...你需要取圆公式,选择你想要的圆弧,比如PI * 2 / 3,也就是圆的三分之一,除以这个圆弧分成 N 个部分,然后在每个部分中,你创建一个从圆圈向外的平面,每个平面是 2 个三角形(使 2 个三角形在视觉上形成一个矩形),最后,你会有你想要的结果。

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