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