第2种开始
全局定义:
typedef struct _me3DS
{
string fileName;//文件名
t3DModel Model;//模型
CLoad3DS *gothicLoader;//类实例
}me3DS;
vector<me3DS> me3ds; // 所有模型
t3DModel *gothicModel;//这个改为指针
增加一个函数
//按名称加载模型
void loadNameModel(char *filename)
{
me3DS *ds=new(me3DS);
for(int i=0;i<MAX_TEXTURES;i++)
ds->Model.texture[i]=0;
ds->Model.numOfMaterials=0;
ds->Model.numOfObjects=0;
ds->fileName=filename;//文件名
ds->gothicLoader=new(CLoad3DS);
gothicModel=&ds->Model;//显示指向
char m0[256];
sprintf(m0,"Data/3ds/%s",filename);//加上路径
ds->gothicLoader->Import3DS(gothicModel, m0);//载入
me3ds.push_back(*ds);//存入
}
InitGL(GLvoid)中
//gothicLoader->Import3DS(gothicModel, "Data/3ds/GUTEMB_L.3DS"); //改为下句
loadNameModel("GUTEMB_L.3DS");//按名称加载
WndProc 的 WM_COMMAND 和上一篇同一位置
int iIndex=2;
char szBuffer[256];
iIndex = SendMessage(hwndList,LB_GETCURSEL,0,0);//得到当前选择项
if (iIndex != LB_ERR){
SendMessage (hwndList, LB_GETTEXT, iIndex,(LPARAM) szBuffer);//得到选择文本
//第1、运行外部程序
/* .......//运行外部程序
*/
//第2、
bool bf=false;
for(int i = 0; i < me3ds.size(); i++)
{
if(me3ds[i].fileName==string(szBuffer))//是否已加载
{
bf=true;break;
}
}
if(bf==true){
gothicModel=&me3ds[i].Model;//已加载显示指向
}
else{
loadNameModel(szBuffer);//没有则载入
}
}
运行图
由于没有置中处理,有的显示半个,黑屏,太小
第2种完成