1

我正在研究 3D 顶点蒙皮。一切正常。我现在被困在如何最好地以图形方式表示我的骨骼。我认识到我可以将骨骼画成从一个关节到下一个关节的简单线条。

但是,我强烈希望绘制类似于搅拌机骨骼(带有头部和尾部)的图形表示。

我的示例代码(如下)仅适用于朝向(0,1,0)方向的关节。如果我有一个面向 (1,0,0) 的骨骼,那么它不能准确地表示该骨骼。

所以最终,我的问题是:是否有一个数学方程可用于根据我的骨关节面对的方式将这些顶点从 (0,1,0) 定向到某个任意矢量方向。

glm::vec3 vert[14];
vert[ 0] = glm::vec3( 0.0f, 0.0f, 0.0f);
vert[ 1] = glm::vec3(-0.2f, 0.2f,-0.2f);
vert[ 2] = glm::vec3( 0.2f, 0.2f,-0.2f);
vert[ 3] = glm::vec3( 0.0f, getLength(), 0.0f);
vert[ 4] = glm::vec3(-0.2f, 0.2f,-0.2f);
vert[ 5] = glm::vec3(-0.2f, 0.2f, 0.2f);
vert[ 6] = glm::vec3( 0.0f, 0.0f, 0.0f);
vert[ 7] = glm::vec3( 0.2f, 0.2f,-0.2f);
vert[ 8] = glm::vec3( 0.2f, 0.2f, 0.2f);
vert[ 9] = glm::vec3( 0.0f, 0.0f, 0.0f);
vert[10] = glm::vec3(-0.2f, 0.2f, 0.2f);
vert[11] = glm::vec3( 0.0f, getLength(), 0.0f);
vert[12] = glm::vec3( 0.2f, 0.2f, 0.2f);
vert[13] = glm::vec3(-0.2f, 0.2f, 0.2f); 
4

1 回答 1

1

以下是更通用的配方,但可能适用于您的问题。

您基本上需要一个与任意方向对齐的模型,通常使用垂直轴,但任何方向都可以。然后您可以使用骨骼应用点的差异作为目标向量,将模型轴作为原点向量。从那时起,:

  • 你计算这些向量之间的旋转四元数,正如那里解释的那样,

  • 以及通过将目标向量长度除以原始向量长度的比例因子。

  • 如果渲染的矢量需要面向特定方向,您可以使用面向模型的矢量重复第一个操作。

您现在有了旋转和缩放参数,可以将模型转换为所需的拟合。只需将这些转换为矩阵,并将其应用于顶点变换阶段。

这个最近的问题涉及渲染同一网格的许多实例,它可能有助于了解在准备好所有数据后如何进行。

于 2013-08-16T10:13:24.110 回答