2013-08-16 30 views
1

我正在研究3D頂點蒙皮。一切工作正常。我現在被困在如何最好地用圖形表示我的骨頭。我意識到我可以將骨骼畫成從一個關節到另一個關節的簡單線條。如何以圖形方式繪製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

如果你有骨骼方向和方向,你可以用簡單的矢量代數在它周圍構造​​一個多面體。你也可以建立一個「股票」模型(在主軸上),然後旋轉和縮放它以匹配你想渲染的骨骼。 – didierc

回答

1

以下是一個更一般的配方,但可能適用於您的問題。

您基本上需要一個模型排列在任意方向上,通常使用縱軸,但任何方向都可以。然後,您可以將骨骼應用點的差異用作目標矢量,並將模型軸用作原始矢量。從此,:

  • 你計算這些矢量之間的旋轉四元數,在由所述原矢量長度除以目標向量長度解釋there

  • 和比例因子。

  • 如果呈現的人需要面對特定方向,則可以使用面向向量的模型重複第一個操作。

您現在有旋轉和縮放參數可將模型轉換爲所需的擬合。只需將它們轉換爲矩陣,並將其應用於頂點變換階段。

This recent question涉及渲染同一網格的多個實例,它可能有助於瞭解一旦準備好所有數據後,如何進行操作。

相關問題