火焰的图片我是没找到,找到了几张雷电的,就在d3dcoder.net 的directx10那本书代码下载的Bolt Animations for Chapter 9 里面
里面很多张图片,由于c++也是初学,一时来不及弄字符串拼接的函数。 只能定义很多个帧bmp 然后一个一个载入了
具体代码是建立在那个"crate" 例子工程, 就是那个木箱子的代码基础上。
添加的代码如下:
ID3D10ShaderResourceView* mDiffusePic[9];我定义了一个能装9张图片的shaderview
然后开始从文件载入
HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"BoltAnim/Bolt001.bmp", 0, 0, &mDiffusePic[0], 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"BoltAnim/Bolt002.bmp", 0, 0, &mDiffusePic[1], 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"BoltAnim/Bolt003.bmp", 0, 0, &mDiffusePic[2], 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"BoltAnim/Bolt004.bmp", 0, 0, &mDiffusePic[3], 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"BoltAnim/Bolt005.bmp", 0, 0, &mDiffusePic[4], 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"BoltAnim/Bolt006.bmp", 0, 0, &mDiffusePic[5], 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"BoltAnim/Bolt007.bmp", 0, 0, &mDiffusePic[6], 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"BoltAnim/Bolt008.bmp", 0, 0, &mDiffusePic[7], 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"BoltAnim/Bolt009.bmp", 0, 0, &mDiffusePic[8], 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"BoltAnim/Bolt001.bmp", 0, 0, &mDiffuseMapRV, 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"WoodCrate01.dds", 0, 0, &mDiffuseMapRV1, 0 )); HR(D3DX10CreateShaderResourceViewFromFile(md3dDevice, L"defaultspec.dds", 0, 0, &mSpecMapRV, 0 ));
当所有东西存好在mDiffusePic里面过后,就是开始绘制了。
最开始那个木箱盒子是绘制的固定的一个纹理贴图 mDiffuseMapRV
这里我们改用刚定义的mDiffusePic. 而且是在drawScene函数里面 每隔一定的时间换一张图片
这样快速的就形成了帧动画了。
// Every quarter second, generate a random wave. static float t_base = 0.0f; static int flag=0; if( (mTimer.getGameTime() - t_base) >= 0.15f ) { t_base += 0.15f; mfxDiffuseMapVar->SetResource(mDiffusePic[(flag++)%9]); }
由于是我的读书笔记,所以没有全部工程的源码给出。只是方便同在学习这本书的童鞋查缺补漏。 以上都是核心的需要注意的代码了。