【发布时间】:2018-07-25 22:25:46
【问题描述】:
为了实现下图中的红线,我必须寻找哪些图形/数学算法?
更好地解释它:我需要在网格上绘制两个点,然后生成从一个点到下一个点的直线段。这条线段将由沿其路径的每条边创建的新顶点形成。
我目前正在与CGAL 和Libigl 合作,但他们似乎都没有解决方案。我尝试过CGAL::Surface_mesh_shortest_path,但它增加了太多开销(代码运行非常缓慢),并且根据网格变形,不能保证线是直的。
【问题讨论】:
-
IANAE,但我尝试解决此问题的基础是查找 projective texture mapping 的算法。你并不关心计算纹理坐标 (u,v) 的算法,但如果你想一想,计算正方形纹理边缘的模型空间坐标 (s,t) 的算法正是你在找什么。
-
你说的直是什么意思?您似乎在寻找测地线,这正是
Surface_mesh_shortest_path计算的结果。它不会比这更直(假设您的意思是曲线在切线空间中是直的)。计算表面上的测地线是一项相当艰巨的任务。这可能是它如此缓慢的原因。但是你可能会发现一些其他的使用关键字的实现;有一些近似算法,速度更快。 -
你不需要一个法线(可能垂直于 p0-p1 向量)来投影线吗?
-
如果你不需要坐标,只是为了渲染线条,为什么不使用着色器呢?如果渲染的片段相交(在附近)一些(半)平面或区域将其重新着色为红色......类似于Analysis of a shader in VR。如果您还需要折线,您可以从帧缓冲区中提取它...或使用计算着色器并直接存储它...
标签: c++ graphics geometry mesh cgal