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

时间:2018-10-09 09:53:54

标签: opengl polygon pyopengl tessellation

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

例如:

enter image description here

我想绘制此半管,并且已将标记的点排序(绘制为红色圆圈)。

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

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

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

1 个答案:

答案 0 :(得分:1)

您应该了解如何在3D模式下渲染模型,之后,您将可以制作所需的任何东西。

每个模型都由三角形组成,一个三角形是空间中的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个三角形在视觉上形成矩形),最后,您将得到预期的结果。

要真正弄清楚该如何做,您需要学习如何手工构建网格,然后拿一张纸做数学。另外,您可以手动构建整个事物,它只是数字,代表空间中的点,由线连接起来,这些线将平面包围起来。每个平面都是一个三角形。