我需要在给定点和法线向量的情况下插入3D表面。
考虑到它的表面上的一个点,我需要在插入插值后找到该点在空间中的位置。我需要能够孤立地为每个三角形做到这一点。
这是我想要描述的内容。一旦曲线/曲面被插值,我就需要点的位置。
如果我在2D工作:
3D:
我已经看到了这篇论文"Simple local interpolation of surfaces using normal vectors - Takashi Nagata",我认为这正是我正在寻找的内容(第2.2节。使用法线插入补丁),但数学就超出了我的范围。
我想要从中提取的是一组方程式,其中包含三角形的点的位置和法线进入,以及三角形上的点,并且调整后的点出来(像魔法一样)
答案 0 :(得分:3)
这篇论文看起来像是试图拟合二次曲面,以便它与你所拥有的点和法线相匹配。结果表面由
给出p(s,t) = c00 + c10 s + c01 t + c11 s t + c20 s^2 + c02 t^2
其中s,t是两个变量,c00等是具有三个坐标的所有向量。选择s,t,所以在s = 0,t = 0时它是你的第一个点,s = 1,t = 0是你的第二个点,s = 1,t = 1是你的第三个点。假设我们可以找到各种c00,你可以在三角形中选择一些s,t值给出一个中间点,s = 2/3,t = 1/3可能是一个找到候选者。
查找c00等将需要一些工作。您可能需要实现eqn 15,它提供曲率,作为函数
vec3 c(vec3 D,vec3 n0,vec3 n1) {
vec3 v = (n0 + n1)/2; // 12a
vec3 dv = (n0 - n1)/2; // 12b
double d = D.dot(v); // 13a
double dd = D.dot(dv); // 13b
double c = n0.dot(n0 - 2*dv); // 14a
double dc = n0.dot(dv); // 14b
vec3 res;
if( c == -1 || c==1 )
res = vec3.zeroVector;
else
res = dd / (1-dc) * v + d / dc * dv;
return res;
}
假设你有一个可以做基本向量运算符的vec3类。
根据定义,使用35,36定义起始向量和法线。使用39来定义点对d1,d2,d3和曲率c1,c2,c3之间的差异。使用方程44
x(η, ζ ) = x00(1 − η) + x10(η − ζ ) + x11ζ
− c1(1 − η)(η − ζ ) − c2(η − ζ )ζ − c3(1 − η)ζ
并完成了。
答案 1 :(得分:2)
对于记录,因为我想在网络上的某个地方提供这些信息。
这是使用OP发布的纸张的2d插值。
1a 和 1b 是边界条件,方程 4a 和 4b 是x和插值所需的向量 c 的y分量。