OpenGL - 绘制由一组点组成的非平面 3D 多边形
OpenGL - Draw non planar 3D polygon consisted of a set of points
我有一组点组成一个形状(特别是半个管道,其他类似的形状)。我需要一种方法来绘制这个圆柱面。
例如:
我要画这个半管,标记点已经排序(画成红圈)
具有圆柱体(具有线性边缘,而不是完全圆形)的近似值很好。
我的形状并不总是半管或圆柱形,但总是封闭的多边形,其中我有一组点形成它。
(我正在使用 PyOpenGL,但这并不重要)
你应该了解模型是如何在 3D 中渲染的,在那之后,你将能够制作任何你想要的东西。
每个模型由三角形组成,一个三角形是space中的任意3个顶点。
您可能想要下载并启动一个建模程序,例如 blender,并在尝试之前尝试构建您想要构建的东西,因为您要么必须手动构建它,要么编写一个算法这样做。
然后转到线框视图或点视图,您将看到实际构建的内容。只是不要忘记先正确三角化(如果你出于某种原因使用四边形,搅拌机可以自动完成)。
最重要的是,您想使用现代 openGL,这意味着您必须学习管道...
嗯,这个是没法避免的,你一定要看书学习:https://learnopengl.com/
不过我可以给你总结一下:
- 获取模型数据 - 在这种情况下,如果您希望它看起来像您向我们展示的那样,顶点和三角形就足够了;
- 加载顶点数据并将其绑定到 VAO,并将您的三角形(索引,指定 VAO 数据中的顶点排序的数字)绑定到 EBO。 Meanings are here.
- 现在,您构建矩阵,例如投影矩阵,它将用于正确变换顶点,使其看起来像一个正确的 3D 对象,根据需要进行旋转等等;
- 您使用 glDrawElements() 渲染 EBO 数据;
是的,这不应该很清楚,但是您将在学习本教程的过程中学习如何做。
至于如何获取实际半管的数据...你需要取圆公式,选择你想要的圆弧,比如PI * 2 / 3
,也就是圆的三分之一,除以这个圆弧分成 N
个部分,然后在每个部分中,你创建一个从圆圈向外的平面,每个平面是 2 个三角形(使 2 个三角形在视觉上形成一个矩形),最后,你会有你想要的结果。
要真正弄清楚如何做到这一点,您需要学习如何手工构建网格,然后拿一张纸做数学题。此外,您可以手动构建整个东西,它只是数字,代表 space 中的点,由线连接,包围平面。每个平面都是一个三角形。
我有一组点组成一个形状(特别是半个管道,其他类似的形状)。我需要一种方法来绘制这个圆柱面。
例如:
我要画这个半管,标记点已经排序(画成红圈)
具有圆柱体(具有线性边缘,而不是完全圆形)的近似值很好。
我的形状并不总是半管或圆柱形,但总是封闭的多边形,其中我有一组点形成它。
(我正在使用 PyOpenGL,但这并不重要)
你应该了解模型是如何在 3D 中渲染的,在那之后,你将能够制作任何你想要的东西。
每个模型由三角形组成,一个三角形是space中的任意3个顶点。
您可能想要下载并启动一个建模程序,例如 blender,并在尝试之前尝试构建您想要构建的东西,因为您要么必须手动构建它,要么编写一个算法这样做。
然后转到线框视图或点视图,您将看到实际构建的内容。只是不要忘记先正确三角化(如果你出于某种原因使用四边形,搅拌机可以自动完成)。
最重要的是,您想使用现代 openGL,这意味着您必须学习管道...
嗯,这个是没法避免的,你一定要看书学习:https://learnopengl.com/
不过我可以给你总结一下:
- 获取模型数据 - 在这种情况下,如果您希望它看起来像您向我们展示的那样,顶点和三角形就足够了;
- 加载顶点数据并将其绑定到 VAO,并将您的三角形(索引,指定 VAO 数据中的顶点排序的数字)绑定到 EBO。 Meanings are here.
- 现在,您构建矩阵,例如投影矩阵,它将用于正确变换顶点,使其看起来像一个正确的 3D 对象,根据需要进行旋转等等;
- 您使用 glDrawElements() 渲染 EBO 数据;
是的,这不应该很清楚,但是您将在学习本教程的过程中学习如何做。
至于如何获取实际半管的数据...你需要取圆公式,选择你想要的圆弧,比如PI * 2 / 3
,也就是圆的三分之一,除以这个圆弧分成 N
个部分,然后在每个部分中,你创建一个从圆圈向外的平面,每个平面是 2 个三角形(使 2 个三角形在视觉上形成一个矩形),最后,你会有你想要的结果。
要真正弄清楚如何做到这一点,您需要学习如何手工构建网格,然后拿一张纸做数学题。此外,您可以手动构建整个东西,它只是数字,代表 space 中的点,由线连接,包围平面。每个平面都是一个三角形。