OpenGL:缩放自适应网格线

3

我正在尝试制作一个视口网格,就像大多数3D建模软件中看到的那样,缩放可以调整网格间距,使线条不会过于密集或过于稀疏。例如,缩小视图会将间距从1米更改为2米,然后是5米、10米和20米等等。有什么帮助吗?

1个回答

2
这里通常不像你最初想象的那么复杂。例如,你可能会注意到相机的平移和旋转对网格密度没有影响,即使网格面板距离观察者的最近距离可能在变化。同样,改变视野角度对所选网格单元大小没有影响,尽管理想情况下可能应该有影响,因为它可以显著地扭曲和缩小视图。
因此,通常只有这种基本的、一维的缩放距离的概念与查看目标(相机中心)相关联,它不涉及任何花哨的数学,只需调整一个影响传递给glScaleglTranslate的值的标量,例如:
随着它的增加,用于绘制网格的单位大小(以及可能的捕捉到它),通常不是一些精妙的、数学的解决方案,而只是从缩放距离到硬编码的单位大小的线性映射,如1毫米、2毫米、5毫米、10毫米、20毫米、50毫米、1厘米等。
这些东西通常不是某种算法论文的结果,而只是开发人员/设计师坐下来调整这些东西,直到它们看起来/感觉正确。如果你正在尝试开发3D软件,我建议不要忽视与用户交互相关的这种基本解决方案,因为在3D中很容易变得确信一切都必须复杂化,并且有很多研究和完美准确的数学解决方案支持。对于UI部分,你可以使用更加非正式的解决方案。
有时,这些UI视觉/交互的正式数学解决方案在实践中并不像这些拼凑的解决方案那样有效,正如你可能已经注意到来自更学术领域的用户界面中(通常在这些事情上更聪明的数学和算法,但实际上不太直观)。

说得非常好!到目前为止,我已经意识到,在3D软件设计方面没有特定的方法。一开始似乎很容易制作出这样的东西,但它让我很困扰。例如,我有一个缩放因子,从1(无缩放)开始,接近0时进行缩放。我尝试添加硬编码值,但那种间距效果似乎几乎是无限的。您可以从毫米缩小到公里。 - Dan G
所以我目前正在尝试想出一些公式,考虑缩放因素来产生有效的网格线间距。我目前没有使用glScale,网格基本上在每次渲染时重新绘制,线间距作为参数传递(例如0.5绘制每半个单位的线)。我会再试一次,看看我能得到什么结果。 - Dan G
值得注意的一点是,选择像“2米”或“5米”这样的自适应网格单位实际上只是一种“捕捉”的形式。因此,为了避免一次尝试做太多而感到不知所措,我建议首先找到一个公式,将您处理此缩放因子的方式映射到网格单位大小,以便获得直观的单位大小(例如:允许像0.372572913这样的网格单位大小--暂时不要担心它在现实世界中意味着什么,只需尝试使其与您的缩放级别相匹配即可)。然后,您可以添加捕捉和真实世界单位作为最后的修饰。 - user4842163
那么,这就完全成为了关于尝试将缩放因子映射到单位大小的公式。我不太确定如何使用范围为[1,0]的缩放来处理缩放,但是您可以尝试一些东西,例如zoom_factor*zoom_factor-log(1-zoom_factor)等。由于这些通常不依赖于FOV之类的事物,因此您只需在任何距离处调整神奇的公式,直到它看起来正确即可。 - user4842163
出于好奇,你想要创建什么类型的3D软件?建模软件、动画软件、合成软件、渲染软件,还是以上所有类型的软件? - user4842163
显示剩余14条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接