3D 建模器(例如搅拌机)如何选择您单击的顶点?

Posted

技术标签:

【中文标题】3D 建模器(例如搅拌机)如何选择您单击的顶点?【英文标题】:how does a 3D modeler (such as blender) pick the vertex that you click on? 【发布时间】:2015-03-04 05:26:37 【问题描述】:

如果您在 3D 建模器(例如 blender 或 max)中单击模型查看器,它将选择鼠标上方或附近的顶点。它如何知道要有效地使用哪一个?它如何有效地使用套索工具或圆形工具?它是使用屏幕空间坐标作为顶点还是使用简单的光线追踪? 我正在尝试制作一个简单的 3D 模型工具(为了好玩),我无法想象圆形工具是如何工作的。它如何在没有排序的情况下选择离鼠标坐标最近的顶点?

【问题讨论】:

【参考方案1】:

有很多方法可以解决这个问题。

    如果您只有几千个顶点,则只需遍历所有顶点会非常快。

    如果您只是单击其中一个视图中的顶点(或其他对象),则可以为场景中的每个对象使用不同的“颜色”将场景渲染到另一个缓冲区。要确定您点击的是哪个对象,您只需读取该像素的颜色即可。

    在其他情况下,您可以将顶点数据存储在空间索引中,例如八叉树。

记住:Blender 是开源的,所以如果你想了解 Blender 是如何做到的,可以阅读source code。

【讨论】:

#2 是一种非常常见的处理复杂场景的方法;尤其适用于选择面或对象。对于OP的问题,其中一种方法是将每个顶点渲染为单个像素,然后在鼠标坐标的特定半径内检查屏幕外缓冲区中的所有数据,寻找最接近的一个;可能会遇到非常密集的顶点集的怪癖,但这听起来不像是这个用途的问题。记得关闭 #2 的抗锯齿/多重采样,而且要格外小心仔细检查颜色通道深度。 我认为glSelectBuffer() 不在核心中,这在某些系统上排除了它。 哦,它曾经是,但在某个时候被删除了。我认为在 3 或 4 中。我将删除该评论,因为这不是一个好建议。我猜我生锈了。 这是个好建议,因为还有很多人仍在使用兼容性配置文件,而且兼容性配置文件可能会在 Windows 上永远得到支持,因为 GL 供应商非常谨慎地维护对旧版应用程序的支持。跨度> 感谢您的帮助。这给了我很多思考。我正在尝试编写软件渲染/建模器,因此速度非常重要,比模型本身的质量更重要。

以上是关于3D 建模器(例如搅拌机)如何选择您单击的顶点?的主要内容,如果未能解决你的问题,请参考以下文章

搅拌机在 X-Y 平面上移动顶点

三维建模的基本流程

搅拌机可以按顶点 UV 坐标导出吗?

ios - ARKit 3D模型素材

搅拌机统一问题

如何用matlab将3D打印的stl文件的顶点数据转换成三维二值图像