求d3d达人
不知你们在d3d编程里有没有使用"模型标识"一词呢
引用:
C/C++ code
嗯 我是在研究透视 说白了 我是在写外挂。。。
在MyDrawIndexedPrimitive(原DrawIndexedPrimitive 前面的my 就是我HOOK到了DrawIndexedPrimitive这函数 程序若调用就会执行 MyDrawIndexedPrimitive函数) 这函数里判断要渲染是对象是不是人物呢
C/C++ code
这样就达到了透视效果 比如说我想渲染里面的人物为红色
因为我一点点的d3d知识 我看了一篇文章的方法:
C/C++ code
为什么到了里面全是红色的呢?
我想这是没错的呀 为什么呢
引用:
C/C++ code
所以要实现人物透视就必须找到游戏中的人物模型表示,例如,穿越火线人物模型表示为44
嗯 我是在研究透视 说白了 我是在写外挂。。。
在MyDrawIndexedPrimitive(原DrawIndexedPrimitive 前面的my 就是我HOOK到了DrawIndexedPrimitive这函数 程序若调用就会执行 MyDrawIndexedPrimitive函数) 这函数里判断要渲染是对象是不是人物呢
C/C++ code
HRESULT MyDrawIndexedPrimitive(....) { IDirect3DVertexBuffer9* pStreamData = NULL; UINT iOffsetInBytes,iStride; Device->GetStreamSource(0,&pStreamData,&iOffsetInBytes,&iStride); pStreamData->Release(); if (iStride == 32 && Wallhack==1) //iStride人物模型标示值 Wallhack透视开关 { //如果要渲染的是人物 和 透视开关键为开启 Device->SetRenderState(D3DRS_ZENABLE,FALSE); //禁用Z缓存 SysDrawIndexedPrimitive(.....)//系统函数 // Device->SetRenderState(D3DRS_ZENABLE,TRUE); //开启Z缓存 } }
这样就达到了透视效果 比如说我想渲染里面的人物为红色
因为我一点点的d3d知识 我看了一篇文章的方法:
C/C++ code
IDirect3DTexture9* texRed=NULL; //全局 IDirect3DTexture9* texGreen =NULL;//全局 //下面这个是My创建纹理函数 HRESULT GenerateTexture(IDirect3DDevice9 *pD3Ddev,IDirect3DTexture9 **ppD3Dtex, DWORD colour32) { if( FAILED(pD3Ddev->CreateTexture(8, 8, 1, 0, D3DFMT_A4R4G4B4, D3DPOOL_MANAGED, ppD3Dtex, NULL)) ) return E_FAIL; WORD colour16 = ((WORD)((colour32>>28)&0xF)<<12) |(WORD)(((colour32>>20)&0xF)<<8) |(WORD)(((colour32>>12)&0xF)<<4) |(WORD)(((colour32>>4)&0xF)<<0); D3DLOCKED_RECT d3dlr; (*ppD3Dtex)->LockRect(0, &d3dlr, 0, 0); WORD *pDst16 = (WORD*)d3dlr.pBits; for(int xy=0; xy < 8*8; xy++) *pDst16++ = colour16; (*ppD3Dtex)->UnlockRect(0); return S_OK; } //下面是个MyEndScene 是HOOK 也就是如果程序执行EndScene函数就会执行MyEndScene HRESULT MyEndScene (...) { GenerateTexture(Device, &texRed,D3DCOLOR_ARGB(255,255,0,0)); //创建纹理 GenerateTexture(Device, &texGreen,D3DCOLOR_ARGB(255,0,255,0))//创建纹理; } //最后到了MyDrawIndexedPrimitive渲染函数 HRESULT MyDrawIndexedPrimitive(......) { IDirect3DVertexBuffer9* pStreamData = NULL; UINT iOffsetInBytes,iStride; Device->GetStreamSource(0,&pStreamData,&iOffsetInBytes,&iStride); pStreamData->Release(); if(iStride == 32)//如果是人物 { Device->SetRenderState(D3DRS_ZENABLE,FALSE);//禁用Z Device->SetTexture( 0, texRed); //设置纹理 hr=SysDrawIndexedPrimitive(......) //系统DrawIndexedPrimitive函数 Device->SetRenderState(D3DRS_ZENABLE,TRUE);//启用Z return SysDrawIndexedPrimitive(.....);//返回再次调用SysDrawIndexedPrimitive函数 } }
为什么到了里面全是红色的呢?
我想这是没错的呀 为什么呢
作者: dengchaozhu 发布时间: 2011-06-15
求哪位会的帮个忙啦
作者: dengchaozhu 发布时间: 2011-06-15
麻烦各位大哥帮个忙啦
作者: dengchaozhu 发布时间: 2011-06-15