【问题标题】:How to select the front triangles of a stl model or a triangular mesh?如何选择stl模型或三角形网格的前三角形?
【发布时间】:2014-07-02 13:16:46
【问题描述】:

有一个 stl 模型(三角形网格)。我想使用可调节的矩形进行选择。如下图。

但我不想选择另一边的三角形。也就是说只能选择矩形中可见的三角形。

AFAIK,有一个 method 可以做到这一点。首先使用特定且独特的颜色渲染每个三角形。然后,检索所选矩形中像素的颜色,并将这些颜色转换回原始标识符。选择了拥有 id 的三角形。我认为这种方法可行但效率低。

那么还有其他更好的方法来做这个选择吗?更优雅、更高效?

【问题讨论】:

  • 如果你的三角形有法线向量,你可以考虑一下。
  • 我在我的应用程序中使用了基于颜色的拾取,它工作得很好。如果你想要一个不同的解决方案,那可能会涉及大量的碰撞测试。它肯定会复杂得多,我怀疑它会更有效。
  • 也许是光线投射... 您将需要创建相当多的光线(与矩形中的像素一样多的光线)并为对象中的每个三角形执行光线三角形命中测试。您可以使用沿命中光线的距离来确定可见的三角形。
  • @KillConsole 好主意。
  • @vesan 嗨,你能告诉我你的场景是什么吗?比如你的应用程序中的三角形数量。

标签: opengl graphics 3d glsl direct3d


【解决方案1】:

这个过程被称为“挑选”,如果你搜索它,你会有更好的运气。基本上,选定的矩形创建了一个与视锥体的相交体积。该交集体积之外的基元可以被轻易丢弃。需要以某种方式测试卷内的基元以查看哪些是“可见的”。实现拣货的方法有很多种,其中基于颜色的拣货只是其中一种选择。

【讨论】:

  • 谢谢。我认为关键是要像你说的那样决定哪个三角形是可见的。而且我担心在我的情况下,基于颜色的挑选是最准确的方法。
  • 基于颜色的拾取方法没有任何问题。完全通用的技术是将与每个基元关联的 id 渲染到某个缓冲区中,该缓冲区与屏幕上的像素是一对一的。用户单击鼠标,然后您在该辅助缓冲区中查找 id 以识别选择了哪个三角形。如果每次 Z 比较成功时都会覆盖您的辅助缓冲区,那么您的 aux.缓冲区与屏幕上呈现的可见性相匹配。
猜你喜欢
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
相关资源
最近更新 更多