这两节课讲的是模型跟随一个面的运动,我更偏向于直接使用matrix矩阵来做,不想使用channel通道来做,因为我对三维的通道概念还没理解到底是个什么
这是我的节点图
接下来是每一个wrangle节点里面的vex代码,我不做解释了,因为要从矩阵的概念开始讲,太长了,帮助文档上会有详细的讲解
第一个wrangle v@center = getbbox_center(0);
第二个wrangle
int goalprim;
vector goaluv;
xyzdist(1, v@center, goalprim, goaluv);
i@goalprim = goalprim;
v@goaluv = goaluv;
第三个wrangle
v@goalN = primuv(1, "N", i@goalprim, v@goaluv);
v@goalP = primuv(1, "P", i@goalprim, v@goaluv);
vector prim_center_uv = set(0.5, 0.5, 0);
vector prim_offset_uv = set(0.51, 0.5, 0);
vector prim_center_P = primuv(1, "P", i@goalprim, prim_center_uv);
vector prim_offset_P = primuv(1, "P", i@goalprim, prim_offset_uv);
v@tangent_U = prim_offset_P - prim_center_P;
v@tangent_U = normalize(v@tangent_U);
v@goalN = normalize(v@goalN);
v@tangent_V = cross(v@goalN, v@tangent_U);
v@tangent_U = -cross(v@goalN, v@tangent_V);
第四个wrangle
4@m = set(v@tangent_U.x, v@tangent_U.y, v@tangent_U.z, 0,
v@tangent_V.x, v@tangent_V.y, v@tangent_V.z, 0,
v@goalN.x, v@goalN.y, v@goalN.z, 0,
v@goalP.x, v@goalP.y, v@goalP.z, 1);
4@m = invert(4@m);
第五个wrangle v@P = v@P * 4@m;
第六个wrangle
v@goalN = primuv(1, "N", i@goalprim, v@goaluv);
v@goalP = primuv(1, "P", i@goalprim, v@goaluv);
vector prim_center_uv = set(0.5, 0.5, 0);
vector prim_offset_uv = set(0.51, 0.5, 0);
vector prim_center_P = primuv(1, "P", i@goalprim, prim_center_uv);
vector prim_offset_P = primuv(1, "P", i@goalprim, prim_offset_uv);
v@tangent_U = prim_offset_P - prim_center_P;
v@tangent_U = normalize(v@tangent_U);
v@goalN = normalize(v@goalN);
v@tangent_V = cross(v@goalN, v@tangent_U);
v@tangent_U = -cross(v@goalN, v@tangent_V);
第七个wrangle
4@m = set(v@tangent_U.x, v@tangent_U.y, v@tangent_U.z, 0,
v@tangent_V.x, v@tangent_V.y, v@tangent_V.z, 0,
v@goalN.x, v@goalN.y, v@goalN.z, 0,
v@goalP.x, v@goalP.y, v@goalP.z, 1);
第八个wrangle v@P = v@P * 4@m;
这样就可以让船跟随洋面运动