【发布时间】:2020-08-21 14:09:53
【问题描述】:
所以我有一个球体。它围绕给定轴旋转并通过 sin * cos 函数改变其表面。 我在球体上的固定点也有一堆 tracticoids。这些物体在运动时跟随球体(包括旋转和表面的变化)。但我不知道如何使它们始终垂直于球体。我有 tracticoid 连接到球体表面及其法线向量的 ponts。牵引线最初以 z 轴为方向。所以我试图让它成为给定法线向量的轴,但我无法让它工作。
这是我计算 M 变换矩阵及其逆矩阵的地方:
virtual void SetModelingTransform(mat4& M, mat4& Minv, vec3 n) {
M = ScaleMatrix(scale) * RotationMatrix(rotationAngle, rotationAxis) * TranslateMatrix(translation);
Minv = TranslateMatrix(-translation) * RotationMatrix(-rotationAngle, rotationAxis) * ScaleMatrix(vec3(1 / scale.x, 1 / scale.y, 1 / scale.z));
}
在我的绘图函数中,我设置了转换的值。 _M 和 _Minv 是球体的矩阵,因此 tracticoids 跟随球体,但是当我尝试使用旋转矩阵时,tracticoids 在球体表面上分层移动。 _n 是 tracticoid 应该遵循的法线向量。
void Draw(RenderState state, float t, mat4 _M, mat4 _Minv, vec3 _n) {
SetModelingTransform(M, Minv, _n);
if (!sphere) {
state.M = M * _M * RotationMatrix(_n.z, _n);
state.Minv = Minv * _Minv * RotationMatrix(-_n.z, _n);
}
else {
state.M = M;
state.Minv = Minv;
}
.
.
.
}
【问题讨论】:
-
对不起,我不明白球体的表面是如何变化的。它会沿着某个路径移动吗?也许只有到中心的距离改变了?那些“tracticoid”也是如此(我第一次看到这个概念),也许你最好在math.stackexchange.com
-
一开始,球体的表面是“平的”。平坦我的意思是它是一个完美的球体。然后表面开始变得波浪状。我不知道如何更清楚地解释,基本上球体的 R 乘以 sin(3 * U + 4 * V) * cos(time) 所以它开始时球体产生更多的波,然后比回到原来的球体更小形式只是你重新开始。然后表面上有与球体完全垂直的牵引线,当球体改变其表面时,它们保持垂直。牵引线的形状保持不变,只是移动和旋转。
-
也许只有我一个人,但到底什么是“tracticoid”在我的字典中看不到任何内容,在谷歌上我只看到“tractricoid”,即使没有任何有意义的描述......你也应该添加图片/你所拥有的和你想要的草图,因为它有点难以理解你的文字......甚至更多的代码......你正在为你的球体的每个顶点创建矩阵?你知道我们只能猜测你的表面的拓扑结构(它是如何存储的以及密度等属性是什么......)无论如何,垂直于表面是正常的......那么是什么阻止你计算它?跨度>