假设我有两个(例如两个,实际上是一些 n > 1)“相互连接”的矩形棱柱,这样它们相邻面上的 4 个顶点在内存中是相同的顶点。所以就像两个木块,一个叠放在另一个上,底部有 4 个顶点,中间有 4 个,两者共享,顶部有 4 个。现在,我希望能够首先在“顶部”木块上进行特定旋转,就好像它在具有这 4 个共享顶点的中心点的铰链上一样。
因此,就像肘部一样,假设它只能以特定角度弯曲 45 度,为了执行旋转,我围绕那个不可见的铰链中心点旋转了构成对象的 8 个顶点。在此过程中,另一个块的 4 个共享顶点有些移动,但由于铰链是它们之间的中心点,它们并没有“平移”离开底部块。我想称它们为木制是违反直觉的,因为它们会以特定的方式变形,但我试图将其设置为可视化。无论如何,假设我希望能够以不同的方式旋转这个底部块,但让顶部块表现得像它被连接一样。因此,如果底部块移动,顶部块会随之摆动,但也会随着它们之间的铰链上的任何弯曲而摆动。
我正在考虑通过轴角或四元数逐步进行转换,从“最顶层”块开始,沿着依赖链向下工作,在当前块和“上方”块上的每个顶点上执行旋转。但是,这将需要对所有顶点进行偏移,以将当前铰链作为原点,执行旋转,然后反转之前的偏移,为此链中的每个步骤。有没有更有效的方法来处理这个问题?我的意思是速度效率,在内存中拥有额外的预处理数据并不是什么大问题。也可能有一段时间我不能指望拥有这样一个线性依赖链(例如顶部块最终连接到底部块以形成一个环,也许)。