获取 Opengl 的子弹物理变换矩阵

Ark*_*rko 4 bulletphysics opengl-3 glm-math

截至目前,我正在使用以下代码从子弹中的刚体获取变换矩阵并将其应用于我的实例。现在似乎没有更新我渲染的立方体的变换,我的第一个不过是相信我在创建 glm mat4 时丢失了数据。所以我的问题是我是否正确转换数据以转换我的矩阵?

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);
}
Run Code Online (Sandbox Code Playgroud)

小智 5

如果你想要完整的转换,你应该这样做:

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));
Run Code Online (Sandbox Code Playgroud)

由于您目前只创建了一个平移矩阵,因此您会失去方向/旋转,并最终进行缩放。

另请注意,从 Bullet 返回的矩阵在世界空间中,因此如果您有一个场景层次结构/图形,其中矩阵存储为与节点父节点的相对变换,如果需要,您可能还想将矩阵转换为局部空间.