最近研究某游戏的时候发现通过D3DXCreateTextureFromFileInMemoryEx这个函数加载的dds贴图 于是乎 就各种找资料 各种不知道怎么用的。 对d3d不熟悉 各种找教程 今天终于加载成功了。 我的目的很简单 就在我的demo里面可以加载成功 然后进行反汇编 去看游戏的 。。。
贴出代码
LPDIRECT3DTEXTURE9g_pTexture = NULL; // 纹理接口对象
void Initializebmp()
{
FILE* pFile = fopen("E:\\dxts1.jpg", "rb");
fseek(pFile, 0, SEEK_END);
int FileLen = ftell(pFile);
fseek(pFile, 0, SEEK_SET);
char* pData = new char[FileLen];
fread(pData, FileLen, 1, pFile);
D3DXIMAGE_INFO info;
D3DCOLOR colorkey = 0x000000ff;
D3DXCreateTextureFromFileInMemoryEx(
g_pd3dDevice,
pData,
FileLen,
0,
0,
0,
0,
D3DFMT_UNKNOWN,
D3DPOOL_MANAGED,
D3DX_DEFAULT,
D3DX_DEFAULT,
D3DCOLOR_XRGB(0, 0, 0),
&info,
NULL,
&g_pTexture);
}
其实到最后才发现 不管是通过什么方法加载的
D3DXCreateTextureFromFile 原始是直接加载本地图片 但是在游戏里面很少用到这个函数的 基本都是在内存中加载纹理的
//--------------------------------------------------------------------------------------
// 【纹理绘制四步曲之三】:纹理的创建
//--------------------------------------------------------------------------------------
//D3DXCreateTextureFromFile(g_pd3dDevice, L"pal5q.jpg", &g_pTexture);
Initializebmp();
// 设置材质
然后下面启用纹理就好了。
<pre name="code" class="cpp">g_pd3dDevice->BeginScene(); // 开始绘制
//--------------------------------------------------------------------------------------
// 【Direct3D渲染五步曲之三】:正式绘制,利用顶点缓存绘制图形
//--------------------------------------------------------------------------------------
g_pd3dDevice->SetStreamSource( 0, g_pVertexBuffer, 0, sizeof(CUSTOMVERTEX) );//把包含的几何体信息的顶点缓存和渲染流水线相关联
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );//指定我们使用的灵活顶点格式的宏名称
g_pd3dDevice->SetIndices(g_pIndexBuffer);//设置索引缓存
//--------------------------------------------------------------------------------------
// 【纹理绘制四步曲之四】:纹理的启用
//--------------------------------------------------------------------------------------
g_pd3dDevice->SetTexture(0, g_pTexture); //启用纹理
g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 24, 0, 12);//利用索引缓存配合顶点缓存绘制图形
版权声明:本文为qq_24423595原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。