当前位置: 首页 > 知识库问答 >
问题:

如何在现代OpenGl(3.3以上)中选择网格的顶点或三角形?

韩玉石
2023-03-14

我正在做一个项目,我需要选择网格的两个顶点,并计算它们之间的最短路径。我使用GL_数组_缓冲区和GL_元素_数组_缓冲区绑定OpenGL缓冲区,并通过GLDrawerements绘制它们。

寻找最短路径在这里不是问题。问题在于顶点选择。我需要通过鼠标点击选择顶点,并存储它们的ID,以便进一步处理。我有一些返回鼠标位置的函数,但我找不到一个可以获取顶点ID或三角形ID的方法。

我还发现了一些光线拾取方法,但这种方法用于选择网格本身,而不是网格的一个元素。

我很感激任何帮助或想法

更新:我必须处理的网格有大量的顶点和三角形,所以对每个顶点应用唯一颜色等方法不是一个合适的解决方案。此外,向每个顶点或三角形添加一个球体,并计算光线与球体的交点,听起来也不太合适。

共有2个答案

吴均
2023-03-14

从概念上讲,你可以创建另一个单独的帧缓冲区。然后将顶点ID编码成RGBA颜色值。当你在当前可见帧缓冲区上绘制网格时,你需要同时将顶点ID的编码颜色绘制到另一个帧缓冲区中。当拾取一个点时,你可以从另一个帧缓冲区中恢复编码的顶点ID,并对其解码以获得原始顶点ID。简而言之,你需要制作另一个不可见的单独帧缓冲区用于拾取。

薛承基
2023-03-14

我从来没有实现过这样的东西,但我建议像下面这样再进行一次渲染。

  1. 为每个顶点定义一个唯一的颜色,指定顶点的ID。
  2. 因为很难精确地选择一个像素,所以试着在它周围画一个小四边形。
  3. 从你渲染小四边形的纹理/帧缓冲区中读取像素的颜色。
  4. 计算出颜色的顶点ID。

我听说过几个类似的三角形实现。也许你可以从中获得更多的灵感。

 类似资料:
  • 我是JavaFx的新手,我想知道如何绘制网格,我想在网格角上绘制点。我应该使用网格窗格作为基础还是线条图?使用网格并在其上绘制的最佳类是什么?

  • 问题内容: 我需要从合并了2列的表中检索所有行。因此,我希望所有在同一天以相同价格进行的销售都没有其他任何销售。基于日期和价格的唯一销售将更新为活动状态。 所以我在想: 但是我的大脑比这更痛。 问题答案: 是 大致 等效于: 习惯GROUP BY语法是一个好主意,因为它更强大。 对于您的查询,我会这样做:

  • 我在C中使用OpenGL(技术上是EGL,在Jetson Nano上) 假设我想画N个四边形。想象一下一个彩色矩形列表。框架中可能有几千个这样的矩形。 我想使用两个顶点缓冲区: 定义每个四边形的几何形状。 定义每个四元组共有属性的函数。 第一个顶点缓冲区应定义每个四边形的几何体。它应该只有4个顶点,它的数据将只是一个四边形的角。比如: 然后,第二个顶点缓冲区应该只有所有矩形的x、y、宽度和高度。

  • 我有一个多边形的顶点列表,我试图在一个较大的三角形内创建一个等边三角形网格,以输入多边形的当前顶点为中心。 内部三角形边的大小由确定,它将容器边划分为相等的部分。最后,我想在Python的列表中存储所有这些三角形(包括原来的大三角形)顶点的坐标。 我提出的一个方法是: null

  • 我使用量角器在角应用端到端测试。我试图点击选择框中的选项,但我有以下错误元素目前不可见,可能无法操纵。 我有这部分html: 在量角器测试中我有一行代码: 我想点击值为“草稿”的选项。你知道可能是什么问题吗?

  • 我正在按照教程使用OpenGL在屏幕上画一个三角形。我已经正确地遵循了所有的步骤,但我只得到一个绿色屏幕,没有三角形。 这是我现在的代码。在应用程序初始化期间调用DrawScene,并在每个WM_DRAW中调用ResizeScene。我的问题是:为什么三角形没有显示在我的代码中? OpenGL版本:4.6