【发布时间】:2019-09-21 03:55:57
【问题描述】:
我有网格和 2 个点 - A 和 B。每个点都位于网格的某个三角形上。主要目标是 - 使用 2 个点在网格上绘制 正确 线。当点位于具有不同平面的三角形上时 - 我在画线时遇到问题。
我做什么:
CurrentTriangle = A 点所在的三角形。
而 CurrentTriangle != 带 B 点的三角形:
将 B 投影(Bp) 到 CurrentTriangle:将 B 移动 -CurrentTriangle.normal * 到平面的距离。
找到三角形的出口点 - ABp 与三角形边的交点(将 3d 坐标转换为 2d 并找到交点,然后使用重心坐标得到 3d 交点)。
将结果位置移向位置 B 以找到新的 CurrentTriangle。
问题是将位置 B 正确地投影到 CurrentTriangle 的平面上。实际结果:
【问题讨论】:
-
我将再次问同样的问题,我在你之前的问题中问过:正确的行是什么?是测地线吗?为什么红线比黑线好?
-
@Nico Schertlera 正确的线条是在屏幕上笔直且不失真的线条。红线更好,因为用户设置了 2 个点并且应该看到一条线,而不是一条曲线
-
@KonstantinSaietskyi 可以使用相机中心、A、B形成的三角形的平面,对每条边做一个segment-plane相交,选择离B最近的相交。
-
那么,这条路径可以不连续吗?想象一下,我们有一个更左侧的视点。我们看不到小轮辋。那么路径是否应该完全跳过这些三角形?直接在屏幕空间画线会不会更合适?
-
然后做二维交集。获得 2D 点后,只需进行反投影。最简单的方法是记住边缘和边缘上的位置。请记住,透视投影不保留长度比,即两个顶点之间的线性插值必须考虑深度。如果路径被前面的其他面部分遮挡,您可能还需要在面中间停止路径。
标签: 3d geometry projection raycasting map-projections