为了更好的学习FBX SDK中的一些操作,从sample代码入手是效率最高的方法之一。这里我们使用sample中的ViewScene作为学习fbx sdk的第一个项目对象。
在之前的sdk配置的基础上,配置好GL相关文件,包括include,lib以及bin文件在环境变量下的目录,如果不了解具体配置方法,可搜索opengl配置的相关博客。
在配置好后,将ViewScene的源文件以及fbx文件拷贝到你的fbx sdk的根目录下,并添加到项目中,如下所示:
程序运行如下所示:
该项目是一个对fbx文件场景以及动画的显示程序。程序能够更改光照渲染模式,摄像机角度等。
该程序的基本结构如下所示:
Main:
SceneContext * gSceneContext; 定义场景的环境
gSceneContext = new SceneContext(!lFilePath.IsEmpty() ?
lFilePath.Buffer() : NULL, DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT, lSupportVBO);
SceneContext::SceneContext(const char * pFileName, int pWindowWidth, int pWindowHeight, bool pSupportVBO){}
//初始化SceneContext
初始化结束后,opengl动画开始循环播放。暂时不去了解鼠标键盘以及菜单回调函数的实现细节,直接看显示的回调函数,以了解FBX动画的显示与呈现方式,即:
void DisplayCallback()
{
gSceneContext->OnDisplay();
glutSwapBuffers();
// Import the scene if it's ready to load.
if (gSceneContext->GetStatus() == SceneContext::MUST_BE_LOADED)
{
// This function is only called in the first display callback
// to make sure that the application window is opened and a
// status message is displayed before.
gSceneContext->LoadFile();
CreateMenus();
// Call the timer to display the first frame.
glutTimerFunc((unsigned int)gSceneContext->GetFrameTime().GetMilliSeconds(), TimerCallback, 0);
}
if( gAutoQuit ) exit(0);
}
蓝色字体为当显示回调函数第一次被执行时才被调用的方法,即LoadFile,createmenus和glutTimerFunc。LoadFile基本上就是从场景对象中初始化一系列的三维对象,包括动画,模型等等。
红色代码为每次都会调用的显示代码,并配合计时器显示动画:
进一步研究源代码发现内部的逻辑有点复杂,下面需要进一步学习场景加载的相关知识。