【问题标题】:How can I draw a 3D bone graphically如何以图形方式绘制 3D 骨骼
【发布时间】:2013-08-16 02:35:58
【问题描述】:

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

【问题讨论】:

  • 如果你有骨骼方向和方向,你可以用简单的向量代数围绕它构建一个多面体。您还可以构建一个“库存”模型(在主轴上),然后旋转和缩放它以匹配您要渲染的骨骼。

标签: opengl draw


【解决方案1】:

以下是更通用的方法,但可能对您的问题有用。

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

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

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

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

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

This recent question 处理渲染同一网格的多个实例,这可能有助于了解在准备好所有数据后如何进行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 2011-10-09
    • 2013-06-04
    • 2022-11-21
    • 2015-08-08
    • 1970-01-01
    相关资源
    最近更新 更多