2

假设我有两个(例如两个,实际上是一些 n > 1)“相互连接”的矩形棱柱,这样它们相邻面上的 4 个顶点在内存中是相同的顶点。所以就像两个木块,一个叠放在另一个上,底部有 4 个顶点,中间有 4 个,两者共享,顶部有 4 个。现在,我希望能够首先在“顶部”木块上进行特定旋转,就好像它在具有这 4 个共享顶点的中心点的铰链上一样。

因此,就像肘部一样,假设它只能以特定角度弯曲 45 度,为了执行旋转,我围绕那个不可见的铰链中心点旋转了构成对象的 8 个顶点。在此过程中,另一个块的 4 个共享顶点有些移动,但由于铰链是它们之间的中心点,它们并没有“平移”离开底部块。我想称它们为木制是违反直觉的,因为它们会以特定的方式变形,但我试图将其设置为可视化。无论如何,假设我希望能够以不同的方式旋转这个底部块,但让顶部块表现得像它被连接一样。因此,如果底部块移动,顶部块会随之摆动,但也会随着它们之间的铰链上的任何弯曲而摆动。

我正在考虑通过轴角或四元数逐步进行转换,从“最顶层”块开始,沿着依赖链向下工作,在当前块和“上方”块上的每个顶点上执行旋转。但是,这将需要对所有顶点进行偏移,以将当前铰链作为原点,执行旋转,然后反转之前的偏移,为此链中的每个步骤。有没有更有效的方法来处理这个问题?我的意思是速度效率,在内存中拥有额外的预处理数据并不是什么大问题。也可能有一段时间我不能指望拥有这样一个线性依赖链(例如顶部块最终连接到底部块以形成一个环,也许)。

4

3 回答 3

0

从您的描述中听起来,您基本上想要一块长的“果冻”之类的东西,即,如果块/棱镜的顶部移动,那么块/棱镜的其余部分会有一些二次移动-链,有点像移动链或一些软体将如何在构成链或环的其余部分产生二次运动。

如果是这种情况,那么我建议实际构建一些“骨骼”,其中每个骨骼段在构成棱镜/块的每个起点和终点的 4 个顶点的中心点开始和结束。然后,您可以计算当您移动骨骼链的一段时,链中的其他骨骼应该相对于移动的骨骼移动多少。从那里,您可以将棱镜/块中的其余顶点加权到该中央“骨骼”上,以便它们在骨骼移动时移动适当的量。您可能还希望将连接到一个“骨骼”的顶点与另一个骨骼段进行平均,这样连接的顶点的权重就会下降,如果您最终在每个部位都受到过多的挤压,则会产生更平滑的运动“联合的”。

使用顶点对骨骼进行加权的骨骼应该可以减少您需要计算的旋转变换的数量。只有骨骼关节的运动需要繁重的计算......顶点本身只是从链中骨骼的位置进行插值。

于 2012-01-27T19:05:05.750 回答
0

考虑使用现有工具。看看这个关于连接刚体的问题:

https://physics.stackexchange.com/questions/19724/how-to-represent-the-effect-of-linking-rigid-bodies-together

于 2012-01-27T19:21:11.147 回答
0

处理铰接式单端链的标准方法是骨骼动画——使用“骨骼”元素链(由相对平移/旋转关系定义),可选择基于骨骼进行线性插值以确定“皮肤”顶点的位置。(请注意,您需要确定每个“关节”的旋转角度才能完全定义姿势。)

元素环更难处理,因为您不能再独立于所有其他关节定义每个关节的旋转。要解决此问题,请设置包含所有约束的物理模拟或其他求解器。具体要做什么取决于您需要如何操纵对象——如果它是游戏引擎的一部分,物理模拟是有意义的,但如果它是手动动画,则您有多种半自动装配的可能性(关键词:反向运动)。

于 2012-01-27T19:25:07.233 回答