您的位置:86VR > VR教学频道 > 技术教程 > Virtools > 封装VT文件到一个EXE文件中的方法
发表您的文章
站点最新
Virtools 的虚拟场景运用篇
全3D动画济公历时四年横空出世
《战争行为》中文DEMO震撼放出
Discreet官方发布Combustion 4免费…
Creator中DOF节点的应用
Vega Vs OpenGL
CATIAV5R15 新功能介绍
《3D游戏 卷2动画与高级实时渲染技…
蜗牛新作《机甲世纪》主创人员访谈
第二届大连国际数码娱乐艺术周
热门文章
Quest3D最新作品集
2005年单机游戏发行预览
第二届虚拟现实峰会5月18日在京拉…
virtools dev中文手冊简体教程共享
骨骼动画(Skeletal Animation)
虚拟技术让人感觉活灵活现
虚拟美国古村庄
3ds max插件V-Ray更新至1.47.02版…
免费角色动画模型下载
Virtools 2.0中文使用手册[下载]
封装VT文件到一个EXE文件中的方法
类型:整理 | 来自:86VR | 作者:Media | 时间:2005-6-13 |  点击:
下载插件:点这里下载

目的: 建立独立播放的VT可执行文件
前提:安装VC++6.0;安装DirectX SDK

  因为SDK中提供的文件就是基于VC++的。而编译这些文件要用到DirectX中的Lib和头文件等,所以DirectX_SDK要安装。由于现在大多数朋友用的VT都是3.0或以上版本的,可以只安装DirectX9.0 SDK,如果你是net开发环境,直接安装DirectX9.0 c SDK版本;如果你是VC6用SDK extras把DirectX9.0 SDK升级到DirectX9.0C SDK即可版本。

  经过测试VT3.08 SDK对DirectX9.0C SDK完全是支持的。

  1.新建一个文件夹,把你VT安装目录下的Sdk中的Samples.dsw及Standalone Playe放进来。


  2.用VC++打开Smaple.dsw,出现寻找其他的dsp文件的窗口,选择取消。

  3.在VC++的FileView中删除所有才找不到位置的档案,只留下NewPlayerStatic files。

  4.在Project\option中Link相应的头文件和库文件。

  如图:(我这里安装了DirectX8 SDK和DirectX9 SDK)

  你要保证你的DirectX SDK的Lib目录要在C:\Program Files\Microsoft Visual Studio\VC98\LIB的上边。你如果只安装了DirectX9.0 SDK这样编辑Lib的引用:Project--->Setting--->Link,在Object/library modules栏目中只留下以下的Lib d3dx9.lib OpenGL32.lib Glu32.lib Ws2_32.lib Vfw32.lib winmm.lib msacm32.lib dinput.lib dxguid.lib。

  5.这时你可以编译的文件文件(生成一个播放器).执行可以发现生成的EXE比较大,是因为我们把DLL中的函数和接口等全部封装在EXE文件中的缘故.执行这个文件。

  6.改造我们的Windows,因为我们是要封装VT到EXE中,所以把右键菜单,不需要的按钮全部去处。在VC++中的ClassView中找到回调函数LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)注释掉相应消息响应函数。

//屏蔽右键菜单:注释掉case WM_RBUTTONUP: OnContextMenu(); break;这一行

//屏蔽掉按钮的单击消息响应(关闭按钮的响应不应注释掉):注释掉这几行Code:

case BTN_PLAY: 
g_CurrentPlayState|=1;
OnPlayPause(0);
break;
case BTN_RESET:
g_CurrentResetState=2;
OnReset();
break;
case BTN_LOAD:
g_CurrentLoadState=2;
OnLoad();
break;

  7.修改重画标题栏函数void RepaintTitleBar(),去掉Load,Play和Pause三个按钮的显示。
//注释掉这几行代码:

DrawState(dc2,NULL,NULL,(DWORD)g_Virtools,0,3,CenterY-10,0,0,DST_BITMAP|DSS_NORMAL);
DrawState(dc2,NULL,NULL,(DWORD)g_Reset[g_CurrentResetState],0,Center-64,CenterY-9,0,0,DST_BITMAP|DSS_NORMAL);
DrawState(dc2,NULL,NULL,(DWORD)g_Plays[g_CurrentPlayState],0,Center+26,CenterY-9,0,0,DST_BITMAP|DSS_NORMAL);
DrawState(dc2,NULL,NULL,(DWORD)g_Load [g_CurrentLoadState],0,Center-19,CenterY-9,0,0,DST_BITMAP|DSS_NORMAL);


  8.这时候我们来更改Windows的窗口标题:我们让它支持中文的显示:在VC++中的ResourceView中找到String Table.选中他下边的子项,在右键菜单中打开它的属性窗口,把Language修改成Chinese。

  9.编辑右边的TITLE项,输入你的标题。

  10.把头文件"afxRes.h"包到Resource.h文件中去。在Resource.h中加入这一行:

#include<afxRes.h>

  11.接下来我们把我们要播放的VT文件Import到VC++中的ResourceView中去.确定你的Res资源类型。


  12.你可以看到你的VT文件已经到导入进来了。


  13.接下来我和大家说一下播放VT文件的思路:我们需要播放VT时,我们可以把VC++中的VT资源导出来生成一个临时文件,然后让Player而播放即可,播放结束我们在用程序把它删除。

  14.编辑InitInstance()函数接口,把 FileName变成全局变量。
//注释掉这一行

char FileName[512]="";

  把这段变量声明放到对应文件的开始部分.
  15.继续编辑InitInstance()函数,在SetCursor(::LoadCursor(NULL,IDC_ARROW));这一行下边加入导出VT临时文件的Code:

CString Type="VIRTOOL";
HRSRC rest=FindResource(NULL,MAKEINTRESOURCE(IDR_VIRTOOL1),Type);
HGLOBAL gl=LoadResource (NULL,rest);
LPVOID lp=LockResource(gl); //返回指向资源内存的地址的指针。
lstrcpyn(FileName,"c:\\Temp.vmo",512);
HANDLE fp;
fp= CreateFile(FileName ,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
DWORD a; //sizeofResource 得到资源文件的大小
if (!WriteFile (fp,lp,SizeofResource (NULL,rest),&a,NULL))
return false;
CloseHandle (fp); //关闭句柄
FreeResource (gl); //释放内存


  你可以看到我把VT的临时文件放到了C:目录下.你可以任意修改目录到任何地方。

  16.实现Exit时删除临时文件:
  修改void ExitVirtoolsPlayer()函数,加入这一行代码到PostQuitMessage(0);这一行的前边:

DeleteFile(FileName)


附件下载

  框架文件你可能要自己导入VMO资源文件,Type的名字文件中是"VIRTOOL",ID为IDR_VIRTOOL1,请注意要根据实际情况进行修改。说明:我这个框架文件是基于 VT3.0 SDK开发的,如果你用VT SDK是3.08版的话,编译会出现使问题。因为3.08的Lib已经更新了(比如Mp3ReaderLib已经合并到WavReaderLib了等等...)

(完)
可打印版本 | 文章评论 | 我来纠错
 
上篇文章: virtools dev中文手冊简体教程共… 返回:Virtools 下篇文章:Virtools 的虚拟场景运用篇
相关文章
 
网友评论
笔名:
内容:
 
友情
链接
86VR | 虚拟无忌