1

我正在尝试将 3ds 动画导出到 OpenGL,并且我想一点一点地转到下一帧。为此,我使用具有 100 个键的 3ds 文件,所以如果我不犯错误,那就可以了。

为了运行我的动画,我使用了 lib3ds_file_eval 语句,但似乎我做错了

这是我的做法:

void animationTimer(int value) {
    if (g_haltAnimation != 0) {
        lib3ds_file_eval(g_scenes3DS[ANIMATED_KART_ID].lib3dsfile, g_currentFrame);
        g_currentFrame = (g_currentFrame + 1) % g_scenes3DS[ANIMATED_KART_ID].lib3dsfile->frames;
        glutTimerFunc(10, animationTimer, 0);
    }
}

所以这很简单。我将场景的 lib3dsfile 放入参数和下一帧的编号。当我检查节点中的变换矩阵时,它没有改变,我找不到原因。

我注意到lib3dsFile中的current_frame也没有变化,我不知道它是否正常。

4

1 回答 1

0

文件中的正常行为current_frame不会改变。然而,至少一些节点的矩阵应该为非平凡的动画而改变。

您是否通过执行以下操作检查了节点?

for (Lib3dsNode* p = g_scenes3DS[ANIMATED_KART_ID].lib3dsfile->nodes; p != 0; p = p->next )
{
   // check p->matrix here
}

确保检查每个矩阵,因为某些(大多数?)节点可能不会在卡丁车动画中移动。

于 2013-12-27T22:36:38.977 回答