【发布时间】:2016-08-05 16:18:50
【问题描述】:
我遇到了与三角形边缘相交的问题。实际上,我正在尝试使用鼠标选择/相交网格的三角形、顶点、边缘。所以我从鼠标当前位置制作了射线,然后我将它与三角形/多边形、顶点、边缘等网格元素相交以使用它。基本上,3D建模的东西。与三角形相交既简单又有趣。顶点部分很棘手。
但现在,我不知道如何与三角形边相交/拾取。我的意思是当与鼠标射线相交时我如何对待它们?首先,我认为可以将它们视为 3D 线。但最终未能做到 Ray 和 Line 相交。在互联网上搜索但没有找到任何有用的信息。虽然我发现一些开源项目正在使用 OpenGL 内置的拾取功能来拾取/与 Edge 相交。但就我而言,我不能使用它。 :(
我当前的边缘拾取代码结构如下所示:
void pickEdge(Ray ray, Scene scene)
{
for each object in scene
{
mesh = getMesh(object)
for each triangle in mesh
{
for each edge in triangle
{
v1 = getV1(edge)
v2 = getV2(edge)
// Do intersect with 'ray' and 'v1', 'v2'. But how?
}
}
}
}
所以我被困在这里,真的需要一些帮助。非常感谢任何想法、算法或小帮助。
【问题讨论】:
-
确定您的拾取点是否在可接受的边缘“半径”内 - 使用距离到线的公式。然后对边缘进行正交投影,以在必要时在边缘上产生一个“点”。
-
@Brett Hale 你说'使用距离公式'。实际上我被困在这一点上。事实上,我还不能实现 Ray-Line 相交。如果您将其发布为包含更多详细信息的答案,将会更有帮助。感谢您的宝贵意见:)
-
啊...其实我还是卡住了:(需要帮助...拜托。
标签: algorithm math 3d intersection ray-picking