如何以图形方式绘制3D骨骼

时间:2013-08-16 02:35:59

标签: opengl draw

我正在研究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); 

1 个答案:

答案 0 :(得分:1)

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

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

  • 计算这些向量之间的旋转四元数,如there所解释,

  • 通过将目标矢量长度除以原点矢量长度来缩放比例因子。

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

现在,您可以使用旋转和缩放参数将模型转换为所需的拟合。只需将它们转换为矩阵,然后将其应用于顶点变换阶段。

This recent question处理渲染相同网格的许多实例,一旦准备好所有数据,它可能有助于了解如何继续。