2014-02-25 67 views
2

截至目前,我正在使用下面的代碼從子彈的剛體中獲取轉換矩陣並將其應用到我的實例。現在,它似乎不是更新我的渲染立方體的變換,我的第一個雖然是相信我創建glm mat4時丟失數據。所以我的問題是我正確地轉換數據來轉換我的矩陣?Opengl的子彈物理轉換矩陣

for (int i = 0; i < WoodenCrateInstances.size(); i++) 
{ 
    btTransform t; 
    WoodenCrateInstances.at(i).asset->body->getMotionState()->getWorldTransform(t); 
    float mat[16]; 
    t.getOpenGLMatrix(mat); 
    glm::vec3 vec = glm::make_vec3(mat); 
    WoodenCrateInstances.at(i).transform = glm::translate(glm::mat4(), vec); 
} 
+0

超集也需要每個三角形:http://stackoverflow.com/questions/26948060/how-to-apply-bullet-physics-to-drawn-opengl-3d-shapes –

回答

4

如果你想充分變換,你應該做的:

btTransform t; 

// Get the transform from Bullet and into 't' 
WoodenCrateInstances.at(i).asset->body->getMotionState()->getWorldTransform(t); 

// Convert the btTransform into the GLM matrix using 'glm::value_ptr' 
t.getOpenGLMatrix(glm::value_ptr(WoodenCrateInstances.at(i).transform)); 

正如你只能創建的那一刻,你失去方向/旋轉平移矩陣,並最終擴展。

另外請注意,從子彈返回的矩陣是在世界空間,所以如果你有一個場景層次/圖表與矩陣存儲爲相對轉換到節點的父節點,您可能還想要將矩陣轉換爲本地空間,如果需要的話。

0

要想從子彈物理模型矩陣OpenGL的,如果你使用的着色器和自行管理的矩陣,聲明btScalar transform[16],然後查詢的身體運動狀態,並通過使用自定義的效用函數btScalar2glmMat4()格式化模型矩陣。

void Cube::update(glm::mat4 T) { 
    btScalar transform[16]; 

    if (m_motionState) 
     m_motionState->getModelMatrix(transform); 

     m_modelMatrix = btScalar2glmMat4(transform); 
     m_modelMatrix = T * m_modelMatrix; 

     // if (VERBOSE) printMat4(m_modelMatrix); 
} 

class MotionState : public btDefaultMotionState { 

    public: 
    MotionState(const btTransform &transform) : btDefaultMotionState(transform) {} 

    void getModelMatrix(btScalar* transform) { 
     btTransform modelMatrix; 

     getWorldTransform(modelMatrix); 
     modelMatrix.getOpenGLMatrix(transform); 
    } 
}; 

glm::mat4 btScalar2glmMat4(btScalar* matrix) { 
    return glm::mat4(
     matrix[0], matrix[1], matrix[2], matrix[3], 
     matrix[4], matrix[5], matrix[6], matrix[7], 
     matrix[8], matrix[9], matrix[10], matrix[11], 
     matrix[12], matrix[13], matrix[14], matrix[15]); 
} 
+0

雖然此代碼段可解決問題,[包括解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高您的文章的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! – Carpetsmoker

+0

@Carpetsmoker完成,感謝您的有用建議! – LastBlow