线性顶点或在每条曲线上找到起点

我刚才做过这个,忘记了,Remi 和 Legomyrstan 以及 Swalsch 和 Ulyssesp 给了我我需要的答案。

假设您有很多曲线,并且想要确定每条曲线中的第一个点。您可以通过@uv.x = 0 添加 uv 和过滤器,但在过去我发现浮点数学比较可能会被愚弄,因此您测试 @uv.x<0.001,但您冒着以下风险如果您非常精细地重新采样,请选择其他点。啊。

此外,肯定有一种更绝对的方式来查询“让我得到每条曲线的第一个点”。如果您在显示中打开顶点编号,它看起来就像存在:

顶点索引显示.png

很酷,这可能以@vtxnum的形式公开,让我们看看它是否是我们想要的。我会将它复制到@a,并在顶点编号旁边显示它(@a 为橙色,顶点编号为蓝色,点数较少是因为它有点拥挤):

  1. i@a = @vtxnum;

顶点索引与 vtxnum.png

什么?这里发生了一些有趣的事情。看起来 @vtxnum 与视口中的显示顶点编号不同。

我们从@vtxnum 得到的是线性顶点数。那是什么?好吧,如果您要查看geo电子表格并计算行数,那对应于您拥有的点数。如果您跳转到geo电子表格的顶点页面,您可以计算行数以获得您拥有的顶点数。如果你要写下这些数字,那就是@vtxnum,每个顶点一个唯一的 id。

但是但是但是……那不是我们想要的!有没有办法从那个唯一的 id 回到 id-within-the-prim?

当然有,vertexprimindex!给定一个线性顶点,它返回顶点素数,即顶点在其基元内的索引。

在这里,我将 @vtxnum 可视化为紫色,将 vertexprimindex 可视化为红色。您可以看到它与顶点编号的视口显示相匹配:

  1. i@b = vertexprimindex(0, @vtxnum);

顶点索引 vs vtxnum vs vpi.png

因此,为了确定每条曲线的第一个点,我们现在可以将其放入测试中并做一些事情,例如:

  1. int vp = vertexprimindex(0, @vtxnum);
  2. if (vp == 0) {
  3. @group_root = 1;
  4. }

顺便说一句,您可能想知道为什么所有这些并发症。答案是你必须记住点和顶点之间不是 1:1 的对应关系。这些简单的曲线看起来确实如此,但想想一个多边形球体,顶部和底部的点将与数十个甚至数百个顶点相关联。

@vtxnum 真正做的是给你它找到的第一个线性顶点。还有其他的 vex 函数可以让你找到与一个点相关的其余顶点,如果你搜索 vex 函数,会有几个条目用于从点移动到 prims 再到 verts 再返回的不同方式。

如果这些都没有意义,您可能需要阅读points and verts and prims。